# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1262873942 -7200 # Node ID d46562c3d99ddb7cfabfb1d8c0dcd873543ec80e Revision: 200951 Kit: 201001 diff -r 000000000000 -r d46562c3d99d group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/group/bld.inf Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,36 @@ +/* +* Copyright (c) 2006 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: Highlevel bld.inf +* +*/ + + + +#include "../svgt_plat/group/bld.inf" + +/* +* Order is important +*/ + +#include "../svgtopt/group/bld.inf" +#include "../svgtopt/SVGTPlugin/group/bld.inf" + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +PRJ_MMPFILES + +PRJ_TESTMMPFILES diff -r 000000000000 -r d46562c3d99d layers.sysdef.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/layers.sysdef.xml Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,14 @@ + + +]> + + + + + + + + + + diff -r 000000000000 -r d46562c3d99d package_definition.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/package_definition.xml Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r d46562c3d99d svgt_plat/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/group/bld.inf Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,22 @@ +/* +* Copyright (c) 2006 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: Includes all the Domain API specific bld.inf files, which +* export files. +* +*/ + + + +#include "../svgt_api/group/bld.inf" +#include "../nvg_api/group/bld.inf" diff -r 000000000000 -r d46562c3d99d svgt_plat/nvg_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/nvg_api/group/bld.inf Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,29 @@ +/* +* Copyright (c) 2006 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: File that exports the files belonging to +: NVG API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/nvg.h MW_LAYER_PLATFORM_EXPORT_PATH(nvg.h) +../inc/MVGImageBinder.h MW_LAYER_PLATFORM_EXPORT_PATH(MVGImageBinder.h) +../inc/NVGIcon.h MW_LAYER_PLATFORM_EXPORT_PATH(NVGIcon.h) diff -r 000000000000 -r d46562c3d99d svgt_plat/nvg_api/inc/MVGImageBinder.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/nvg_api/inc/MVGImageBinder.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,34 @@ +/* +* 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: NVG Decoder source file +* +*/ + + + +#ifndef MVGIMAGEBINDER_H_ +#define MVGIMAGEBINDER_H_ + +#include + +class MVGImageBinder +{ +public: + virtual ~MVGImageBinder(){} + + virtual TInt BindClientBuffer(TUint aBuffer) = 0; + virtual TInt UnBindClientBuffer() = 0; +}; + +#endif diff -r 000000000000 -r d46562c3d99d svgt_plat/nvg_api/inc/NVGIcon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/nvg_api/inc/NVGIcon.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 2003 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: NVG Decoder header file +* +*/ + + +#ifndef NVGICON_H_ +#define NVGICON_H_ + +#include + +class CNvgEngine; + +/*! + * @class MNVGIcon + * base class for NVG icons + */ +class MNVGIcon + { +public: + + /*! + * @fn SetPreserveAspectRatio + * @brief Sets the Aspect ration for the NVG icon + * @return KErrNone if success, appropriate error code on failure + */ + virtual TInt SetPreserveAspectRatio(TInt aPreserveAspectSetting, + TInt aSmilFitSetting) = 0; + + /*! + * @fn Rotate + * @brief Rotates the icon + * @param aAngle angle of rotation + * @param aX x coordinate rotation center + * @param aY y coordinate rotation center + * @return KErrNone if success, appropriate error code on failure + */ + virtual TInt Rotate(TReal32 aAngle, TReal32 aX, TReal32 aY) __SOFTFP = 0; + + /*! + * @fn Draw + * @brief Draws the icon + * @param aSize size of the icon + * @param aNVGEngine NVG engine instance + * @return KErrNone if success, appropriate error code on failure + */ + virtual TInt Draw(const TSize aSize, CNvgEngine * aNVGEngine) = 0; + + /*! + * @fn ~MNVGIcon() + * @brief Destructs the icon + */ + virtual ~MNVGIcon(); + }; + +#endif diff -r 000000000000 -r d46562c3d99d 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 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 +#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 diff -r 000000000000 -r d46562c3d99d svgt_plat/nvg_api/nvg_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/nvg_api/nvg_api.metaxml Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,14 @@ + + +NVG API +This API is used to decode the NVG icons. +c++ +svgtopt + + + + +no +no + + diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/group/bld.inf Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2006 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: File that exports the files belonging to +: SVGT API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/SVGImageLoadingObserver.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGImageLoadingObserver.h) +../inc/SVGEngineInterfaceImpl.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGEngineInterfaceImpl.h) +../inc/SvgListener.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGListener.h) +../inc/SVGErrorImpl.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGErrorImpl.h) +../inc/SvgJavaInterfaceImpl.h MW_LAYER_PLATFORM_EXPORT_PATH(SvgJavaInterfaceImpl.h) +../inc/SVGHyperlinkListener.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGHyperlinkListener.h) +../inc/SVGAnimationListener.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGAnimationListener.h) +../inc/SVGRequestObserver.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGRequestObserver.h) +../inc/SVGRendererId.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGRendererId.h) diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/inc/SVGAnimationListener.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/SVGAnimationListener.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2003 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: SVG Engine header file + * +*/ + + +#ifndef __INC_MSVGANIMATIONLISTENER__ +#define __INC_MSVGANIMATIONLISTENER__ + + +/** + * This interface is the callback mechanism for the SVG Engine to communicate to + * interested clients about hyperlinks. The client (listener) is notified when + * a pointer has entered or exited a hyperlink and when a hyperlink is activated. + * + * @lib SVGEngine.lib + * @since 1.0 + */ +class MSvgAnimationListener + { + public: + + /** + * Notified when a pointer enters a hyperlink element. + * + * @since 1.0 + * @param : aUri -- URI string of hyperlink + * @return : For future use. Value is ignored. + */ + virtual TBool AnimationStarted(TBool isAnimationIndefinite) = 0; + + /** + * Notified when a pointer exits a hyperlink element. + * + * @since 1.0 + * @param : aUri -- URI string of hyperlink + * @return : For future use. Value is ignored. + */ + virtual TBool AnimationPaused() = 0; + + /** + * This method is called to notify the client that a link has been + * activated. + * + * @since 1.0 + * @param : aUri -- URI string of hyperlink + * @return : For future use. Value is ignored. + */ + virtual TBool AnimationEnded() = 0; + + }; + +#endif /*__INC_MSVGHYPERLINKLISTENER__*/ diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,2173 @@ +/* +* Copyright (c) 2003 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: SVG Engine header file + * +*/ + + +#ifndef SVGENGINEINTERFACEIMPL_H +#define SVGENGINEINTERFACEIMPL_H + +#if !defined(__E32BASE_H__) +#include +#endif + +//does this need to be in a #define +#include +#include +#include +#include "SVGRendererId.h" +#include "SVGListener.h" + +const TInt KSvgEngineUidValue=0x040039CE; +const TUid KSvgEngineUid={KSvgEngineUidValue}; + +typedef TUint TRenderingQuality; +const TRenderingQuality KLowNoAA = 0; +const TRenderingQuality KHighNoAA = 1; +const TRenderingQuality KLowAA = 2; +const TRenderingQuality KHighAA = 3; + +const TInt KInvalidEnumAttribute = -10000; +const TReal32 KInvalidFloatAttribute = -10000; +#define KSVGColorNone 2 +#define KSVGCurrentColor 3 +#define KSVGColorInherit 4 +#define KSVGAttributeInherit 5 +#define __TLV_ // Needed by orbit. + +enum TSvgErrorCode +{ + ESvgNoError = 0, + ESvgFileNotFound, + ESvgDocumentNotValid, + ESvgDocumentNotAvailable, + ESvgNoMemory, + ESvgDiskFull, + ESvgUnknown, + ESvgMissingRequiredAttribute, + ESvgInvalidAttributeValue, + ESvgbFileNotValid, + ESvgDRMFailure, + ESvgThumbNailRestriction +}; + +enum TSvgPreserveAspectAlignType + { + ESvgPreserveAspectRatio_None, + ESvgPreserveAspectRatio_Unknown, + ESvgPreserveAspectRatio_XmaxYmax, + ESvgPreserveAspectRatio_XmaxYmid, + ESvgPreserveAspectRatio_XmaxYmin, + ESvgPreserveAspectRatio_XmidYmax, + ESvgPreserveAspectRatio_XmidYmid, //default + ESvgPreserveAspectRatio_XmidYmin, + ESvgPreserveAspectRatio_XminYmax, + ESvgPreserveAspectRatio_XminYmid, + ESvgPreserveAspectRatio_XminYmin + }; + +enum TSvgMeetOrSliceType + { + ESvgMeetOrSlice_Meet, + ESvgMeetOrSlice_Slice, + ESvgMeetOrSlice_Unknown + }; + +class MSvgHyperlinkListener; +class MSvgTextAreaListener; +class MSvgTextListener; +class MSvgAnimationListener; +class MSvgListener; +class CGfxGeneralPath; +class CFbsBitmap; +class CSvgEngineImpl; +//class CSvgGcStack; +class CSvgElementImpl; +class MSvgEventReceiver; +class MSvgRequestObserver; +class CSvgTimer; +class MXmlElement; +class CSvgDocumentImpl; +class CXmlElementImpl; +class CSvgErrorImpl; +class CSvgTextElementImpl; + +class CSvgBitmapFontProvider; +class MRect + { + public: + + /** + * Get the four points for a rectangle + * + * @since 1.0 + * @return : void + */ + virtual void GetPoints(TPoint& aPoint1, TPoint& aPoint2, TPoint& aPoint3, TPoint& aPoint4) const = 0; + + virtual TBool Intersects( const MRect& aRect ) = 0; + + virtual void Center( TPoint& aCenter ) = 0; + + }; + + +class MSvgError + { + public: + + /** + * Determine wether an error is indicated by this object. + * + * @since 1.0 + * @return : ETrue, if ErrorCode() != ESvgNoError + */ + virtual TBool HasError() = 0; + + /** + * Determine wether an error is only a warning. + * This should be a state when the svg may be display, despite + * a conflict. + * + * @since 1.0 + * @return ETrue if HasError() is only a warning. + */ + virtual TBool IsWarning() = 0; + + /** + * Get the error code contained by this object. + * + * @since 1.0 + * @return : the TSvgErrorCode value + */ + virtual TSvgErrorCode ErrorCode() = 0; + + /** + * Get the error description string for this object. + * + * @since 1.0 + * @return : error description string. + */ + virtual TDesC& Description() = 0; + + /** + * Get the system error code contained by this object. For example, + * If ErrorCode() is ESvgDRMFailure, SystemErrorCode() will contain + * the error-code returned by the system for a drm-failure. + * + * @since 1.0 + * @return : the TSvgErrorCode value + */ + virtual TInt SystemErrorCode() = 0; + }; + +/** + * This class implements the interface for a SVGT Engine, providing methods + * to load svg contents and manipulate the output, such as zooming, panning + * and rotating the display. + */ +class CSvgEngineInterfaceImpl : public CBase + { + public: + + IMPORT_C MSvgError* CSvgEngineInterfaceImpl::SaveSvgDom(TInt aHandle, const TDesC& aFileName, TInt aEngine = NULL); + + /** + * Two phase construction + */ + // April 27th : Add thrid new parameter for specifying the Text height + IMPORT_C static CSvgEngineInterfaceImpl* NewL( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec ); + IMPORT_C static CSvgEngineInterfaceImpl* NewL( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec ,SVGRendererId aRendererType ); + + /** + * Create a new Svg Engine interface. + * + * @since 1.0 + * @param : aFrameBuffer -- bitmap to draw resulting svg image. + * @param : aReqObserver -- interface for callbacks to retrieve info + * only client can provide, such as opening files. + * @param : aFontSpec -- Font spec to use for text drawing. + * @return : none + */ + IMPORT_C static CSvgEngineInterfaceImpl* NewLC( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec ); + // NGA:: overloading NewLC to include a renderer selector parameter + IMPORT_C static CSvgEngineInterfaceImpl* NewLC( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec ,SVGRendererId aRendererType ); + + /** + * Added for getting the NVG-TLV from S60SVGTEngine in QT S60 baseport. + * @since 1.0 + * @return : Pointer to the tlv data + */ + + IMPORT_C const TPtrC8 TLVEncodedData() const; + + /** + * Svg Engine interface Destructor. + * + * @since 1.0 + * @param : None + * @return : none + */ + IMPORT_C ~CSvgEngineInterfaceImpl(); + + /** + * Load a svg document from a file. An error is return if one is encountered. + * Some errors may be more like warnings, which may allow the svg content + * to display nevertheless. + * + * @since 1.0 + * @param aFileName -- Name of svg file + * @return : Error code if any + */ + IMPORT_C MSvgError* Load( const TDesC& aFileName ); + + /** + * Load a svg document from a byte array. An error is return if one is encountered. + * Some errors may be more like warnings, which may allow the svg content + * to display nevertheless. + * + * @since 1.0 + * @param aByteData -- Byte array of svg document. + * @return : Error code if any + */ + IMPORT_C MSvgError* Load( const TDesC8& aByteData ); + + /** + * Load a svg document from from the RFile Handle passed. An error is return if one is encountered. + * Some errors may be more like warnings, which may allow the svg content + * to display nevertheless. + * + * @since 1.0 + * @param aFileHandle -- RFile handle of svg document. + * @return : Error code if any + **/ + IMPORT_C MSvgError* Load( RFile& aFileHandle ); + + /** + * Destroy the currently "loaded" svg document. Prepared documents, + * must be destroy through DeleteDom, or the engine will destroy them + * in its destructor function. + * + * @since 1.0 + * @param : none + * @return : none + */ + IMPORT_C void Destroy(); + + + /** + * Request the SVG Engine to begin an animation. + * + * @since 1.0 + * @param : aEngine -- NULL to start internal svg-engine + * @param : aIsMainThread -- EFalse to start engine asynchronously, + * defaulted to EFalse. + * @return : none + */ + IMPORT_C void Start( CSvgEngineImpl* aEngine = NULL, + TBool aIsMainThread = ETrue ); + + /** + * Request the SVG Engine to begin an animation. + * This method returns an error code. + * @since 1.0 + * @param : MSvgError*& -- Pointer to Error object , + * @param : aEngine -- NULL to start internal svg-engine, + * @return : none + */ + + IMPORT_C void Start( MSvgError*& aError, + CSvgEngineImpl* aEngine = NULL + ); + /** + * Request the SVG Engine to stop an animation. + * + * @since 1.0 + * @param : none + * @return : none + */ + IMPORT_C void Stop( CSvgEngineImpl* aEngine = NULL ); + + /** + * Request the SVG Engine to pause an animation. + * + * @since Series 60 3.0 + * @param : none + * @return : none + */ + IMPORT_C void Pause( CSvgEngineImpl* aEngine = NULL ); + + /** + * Request the SVG Engine to resume an animation. + * + * @since 1.0 + * @param : none + * @return : none + */ + IMPORT_C void Resume( CSvgEngineImpl* aEngine = NULL ); + + /** + * Get the animation duration of a svg content, in milliseconds, + * for non-indefinite animations. + * + * @since 1.0 + * @param + * @return the animation duration. + */ + IMPORT_C TUint32 Duration( TInt aEngine = NULL ); + + /** + * Reset the view to the default values. Redraw() must be called to + * update the output image. + * + * @since 1.0 + * @param + * @return the animation duration. + */ + IMPORT_C void OriginalView( TInt aEngine = NULL ); + + + /** + * Request the SVG Engine to zoom-in on the content given the zoom factor. + * The value range is greater than zero. The current zoom factor is + * multiplied with the given value to yield the final result. Redraw() + * must be called to update the output image. + * + * @since 1.0 + * @param : aScaleFactor -- A value greater than zero. + * @return + */ + IMPORT_C void Zoom( TReal32 aScaleFactor, TInt aEngine = NULL ) __SOFTFP; + + /** + * Shift the center of the content in both x and y coordinates. The + * values are in user-coordinate values and may be negative. Redraw() + * must be called to update the output image. + * + * @since 1.0 + * @param : aX -- Number of pixels to pan left (negative) or right. + * @param : aY -- Number of pixels to pan up (negative) or down. + * @return + */ + IMPORT_C void Pan( TInt aX, TInt aY, TInt aEngine = NULL ); + + /** + * Shift the center of the content in both x and y coordinates. The + * values are in user-coordinate values and may be negative. + * + * @since 1.0 + * @param : aX -- Number of pixels to pan left (negative) or right. + * @param : aY -- Number of pixels to pan up (negative) or down. + * @return TBool + */ + IMPORT_C TBool IsPanPossible( TInt aX, TInt aY, TInt aEngine = NULL ); + + /** + * Checks the panning possibility in four directions. A efficient + * API for clients which want to show 4 way panning indicators. + * It is efficient for these clients to get the all four direction + * information at one go. Saves rendering time significantly per + * frame. + * + * @since 1.0 + * @param : left: would contain result of whether panning of one pixel + * possible to left. + * @param : right: would contain result of whether panning of one pixel + * possible to right. + * @param : up: would contain result of whether panning of one pixel + * possible to up. + * @param : down: would contain result of whether panning of one pixel + * possible to down. + * @param : + * @return + */ + IMPORT_C void IsPanPossibleFourWay + ( TBool& left, TBool& right, TBool& up, TBool& down, TInt aEngine = NULL); + + /** + * Rotate the content about the given point by the given angle. + * The point is in user-coordinates. Redraw() must be called to + * update the output image. + * + * @since 1.0 + * @param : aAngle -- Number of gradients to rotate. + * @param : aX -- X center of rotation + * @param : aY -- Y center of rotation. + * @return + */ + IMPORT_C void Rotate( TReal32 aAngle, + TInt aX, + TInt aY, + TInt aEngine = NULL ) __SOFTFP; + + /** + * Notify the SVG Engine that a "mouse down" event. The engine will + * initiate mouse-related events, such as links, if appropriate. + * + * @since 1.0 + * @param : aX -- x coordinate of mouse event. + * @param : aY -- y coordinate of mouse event. + * @return + */ + IMPORT_C TInt MouseDown( TInt aX, TInt aY, TInt aEngine = NULL ); + + /** + * Notify the SVG Engine that a "mouse up" event. The engine will + * initiate mouse-related events, such as links, if appropriate. + * + * @since 1.0 + * @param : aX -- x coordinate of mouse event. + * @param : aY -- y coordinate of mouse event. + * @return + */ + IMPORT_C void MouseUp( TInt aX, TInt aY, TInt aEngine = NULL ); + + /** + * Notify the SVG Engine that a "mouse move" event. The engine will + * initiate mouse-related events, such as links, if appropriate. + * + * @since 1.0 + * @param : aX -- x coordinate of mouse event. + * @param : aY -- y coordinate of mouse event. + * @return + */ + IMPORT_C void MouseMove( TInt aX, TInt aY, TInt aEngine = NULL ); + + /** + * Notify the SVG Engine that a "key press" event. The engine will + * initiate key-related events if appropriate. + * @since 1.0 + * @param : aKeyCode -- key code of key event. + * @return + */ + + IMPORT_C void KeyPress( const TKeyEvent& aKeyEvent, TInt aEngine = NULL ); + + /** + * Retrieve the rendering quality setting. See TRenderingQuality + * for possible values. + * + * @since 1.0 + * @param + * @return + */ + IMPORT_C TRenderingQuality GetRenderQuality( ); + + /** + * Set the rendering quality. Low-level graphics is always set + * to high -- no effect from this call. Redraw() must be called to + * update the output image. + * + * @since 1.0 + * @param : aQualityLevel -- rendering quality + * @return + */ + IMPORT_C void SetRenderQuality( TRenderingQuality aQualityLevel, TInt aEngine = NULL ); + + /** + * Retrieve the reference to the svg document object. + * + * @since 1.0 + * @param none + * @return current document that was Loaded or Prepare/UseDom. + */ + + //DEPRECATED API... + IMPORT_C CSvgDocumentImpl* SvgDocument(); + + /** + * Set the minimum delay between each frame, in milliseconds. + * Frames per Second = 1000 / aFrameDelay + * + * The default/minimum value is 67 milliseconds (15 fps). + * + * @since 1.0 + * @param : aFrameDelay -- animation frame duration. + * @return none + */ + IMPORT_C void SetAnimFrameDuration( TUint aAFDur, TInt aEngine = NULL ); + + /** + * Request for updating the off-screen image buffer with the + * svg content. + * + * @since 1.0 + * @param aIsMainThread -- indicate whether this redraw request + * is called in the main thread (executed immediately). + * Otherwise, this request is to be executed asynchronously. + * 'Main thread' used here means the thread which instantiated + * this CSvgEngineInterfaceImpl object. + * @return none + */ + IMPORT_C void Redraw( TBool aIsMainThread = ETrue, TInt aEngine = NULL ); + + /** + * Switch the debugging mode on/off. + * + * @since 1.0 + * @param none + * @return none + */ + IMPORT_C void SwitchDebugInfo( TInt aEngine = NULL ); + + /** + * This is the integer version of ContentDimensions. + * 1) Return the size of the width/height if given in non-percentage. + * + * 2) If width/height are given as percentages: + * A) If viewbox attribute is specified, return the viewbox width/height times the width/height percentages. + * B) Else return the content bounding-box size times times the width/height percentages. + * + * @since 1.0 + * @param none + * @return TSize + */ + IMPORT_C TSize ContentDimensions( TInt aEngine = NULL ); + + /** + * This is the floating-point version of ContentDimensions. + * 1) Return the size of the width/height if given in non-percentage. + * + * 2) If width/height are given as percentages: + * A) If viewbox attribute is specified, return the viewbox width/height times the width/height percentages. + * B) Else return the content bounding-box size times times the width/height percentages. + * + * @since 1.0 + * @param none + * @return + */ + IMPORT_C void ContentDimensions( TReal32& aWidth, TReal32& aHeight, TInt aEngine = NULL ) __SOFTFP; + + /** + * Retrieve the content size in user-coordinates if specified as + * percentage. + * + * @since 3.1 + * @param none + * @return TSize + */ + IMPORT_C TSize ContentDimensionsInPercentage( TInt aEngine = NULL ); + + + /** + * Set focus coordinates to the next focusable object. + * + * @since 1.0 + * @param none + * @return rectangle area having the focus on an object. + */ + IMPORT_C TRect FocusNext(); + + /** + * Set focus coordinates to the previous focusable object. + * + * @since 1.0 + * @param none + * @return rectangle area having the focus on the previous object. + */ + IMPORT_C TRect FocusPrevious(); + + /** + * Activate currently focussed object. + * + * @since 1.0 + * @param none + * @return none + */ + IMPORT_C void ActivateObjectInFocus(); + + /** + * Get the current animation frame time, in milliseconds. + * + * @since 1.0 + * @param none + * @return current frame time. + */ + IMPORT_C TInt32 MediaTime( TInt aEngine = NULL ); + + /** + * Set the current animation frame time, in millseconds. + * + * @since 1.0 + * @param aTime -- time to forward/rewind to. + * @return none + */ + IMPORT_C void SetMediaTime( TInt32 aTime, TInt aEngine = NULL ); + /** + * Returns the Size of Viewport + * + * @since 1.0 + * @param none + * @return viewport size + */ + IMPORT_C TSize Size( TInt aEngine = NULL ); + + /** + * Returns the Position of Viewport + * + * @since 1.0 + * @param none + * @return + */ + IMPORT_C TPoint Position( TInt aEngine = NULL ) ; + + /** + * Reset the focus list + * This happens in the event of new additions to EventReceiver list and/or + * sorting of this list + * + * @since 1.0 + * @param aIndex - index of object to reset focus. + * @return + */ + void ResetFocusIndex(TInt32 aIndex); + + /** + * Generate mask bitmap from the current frame + * + * @since 1.0 + * @param aMask - bitmap to hold masking info. + * @return none + */ + IMPORT_C void GenerateMask( CFbsBitmap* aMask, TInt aEngine = NULL ); + + /** + * Set the color for clearing background. + * + * @since 1.0 + * @param aRGBA8888Color - 32-bit color value + * @return none + */ + IMPORT_C void SetBackgroundColor( TUint32 aRGBA8888Color, CSvgEngineImpl* aEngine = NULL ); + + /** + * Returns SVG Engine State + * + * @since 1.0 + * @param none + * @return 0 == SVG Running and 1 == SVG Paused + */ + + IMPORT_C TInt CurrentState( TInt aEngine = NULL ); + + /** + * Returns SVG Engine Pan Position + * + * @since 1.0 + * @param + * @return TPoint + */ + IMPORT_C TPoint PanPosition( TInt aEngine = NULL ); + + /** + * This method is a special case Constructor method used for polymorphic + * DLL loading, which enforces this method to be public. + * + * @since 1.0 + * @return + */ + IMPORT_C CSvgEngineInterfaceImpl(); + + /** + * Replay the Current Animation. + * + * @since 1.0 + * @param : + * @return : MSvgError* Error object specifying the error occured during operation + */ + IMPORT_C MSvgError* Replay( TInt aEngine = NULL ); + + /**Added for DOM Caching API changes*/ + + /** + * Parses and Prepares DOM for given SVG or SVGB file. + * Provides a Handle to the created DOM. A prepared DOM may be + * delete with DeleteDom or when the engine is deleted. + * + * @param aFileName: the name of the file to be parsed + * @param aHandle: Handle to the created DOM. + * @return: MSvgError* Error object specifying the error occured during operation + */ + IMPORT_C MSvgError* PrepareDom(const TDesC& aFileName, TInt& aHandle, TInt aEngine = NULL); + + /** + * Parses and Prepares DOM for both svg and svg binary data. + * Provides a Handle to the created DOM. A prepared DOM may be + * delete with DeleteDom or when the engine is deleted. + * + * @param aByteData: Svg/SvgBinary data. + * @param aHandle: Handle to the created DOM. + * @return: MSvgError* Error object specifying the error occured during operation + */ + IMPORT_C MSvgError* PrepareDom(const TDesC8& aByteData, TInt& aHandle, TInt aEngine = NULL); + + /** + * Parses and Prepares DOM for given SVG or SVGB file. + * Provides a Handle to the created DOM. A prepared DOM may be + * delete with DeleteDom or when the engine is deleted. + * + * @param : aFileHandle -- File handle + * @param : aHandle -- Handle to a DOM. + * @return: MSvgError* Error object specifying the error occured during operation + */ + IMPORT_C MSvgError* PrepareDom( RFile& aFileHandle, TInt& aHandle, TInt aEngine = NULL ); + + /** + * Defines view box for SVG content associated with + * handle if not set. + */ + + + IMPORT_C void ChooseViewBoxIfNotSet(TInt aDomHandle); + /** + * Renders the DOM tree associated with the Handle (UseDom). + * + * @param : aHandle -- Handle to a DOM. + * @param : aBitmap -- Bitmap to draw DOM content. + *@param : aMaskBuffer - Buffer for mask (alpha values) of framebuffer result (optional). + * @return: MSvgError* Error object specifying the error occured during operation + */ + IMPORT_C MSvgError* RenderDom(TInt aHandle, CFbsBitmap* aBitmap, CFbsBitmap* aMaskBuffer = NULL); + + /** + * Deletes the DOM tree associated with the Handle. + * + * @param : aHandle -- Handle to a DOM. + * @return: MSvgError* Error object specifying the error occured during operation + */ + IMPORT_C MSvgError* DeleteDom( TInt aHandle ); + + /** + * Enable/Disable DRM. + * + * @param : aEnable -- Flag to enable/distable DRM. + * @return: none + */ + IMPORT_C void SetDRMMode(TBool aEnable, TInt aEngine = NULL); + + /** + * initialization of the engine according to a particular cached DOM tree. + * + * + *@param : aHandle -- Handle to DOM Tree. + *@param : aRenderBuffer - Buffer for drawing the DOM Tree. + *@param : aMaskBuffer - Buffer for mask (alpha values) of framebuffer result (optional). + *@param : aEngine - SvgEngine handle to manager DOM (optional). + *@return MSvgError* Error object specifying the error occured. + */ + IMPORT_C MSvgError* UseDom(TInt aHandle, CFbsBitmap* aRenderBuffer, CFbsBitmap* aMaskBuffer = NULL, TInt aEngine = NULL); + + IMPORT_C MSvgError* UseDom(TInt aHandle,CFbsBitmap* aRenderBuffer, CFbsBitmap* aMaskBuffer,TSize aRenderBufferSize,TDisplayMode aRenderDisplayMode,TDisplayMode aMaskDisplayMode,TInt aEngine = NULL); + /** + * Set the SVG dimensions to the root buffer size. + * + *@param aWidth - width to set root size. + *@param aHeight - height to set root size. + *@return none + */ + IMPORT_C void SetSvgDimensionToFrameBuffer(TUint aWidth, TUint aHeight, TInt aEngine = NULL); + + /** + * Return the scaled bounding box for the whole svg document. + * + *@param none + *@return the scaled bounding box info. + */ + IMPORT_C TRect GetSvgBoundingBox( TInt aEngine = NULL ); + + /** + * Check for interactive/non-interactive content. + * + *@param aDocument - Document Pointer + *@return wether document has interactive elements. + */ + IMPORT_C TBool IsContentInteractive( CSvgDocumentImpl* aDocument, TInt aEngine = NULL ); + + /** + * Update the path information with the given element + * + *@param hPath - path handle + *@param hElement - element handle + *@return none + */ + IMPORT_C void UpdatePath(TInt hPath, CSvgElementImpl* hElement); + + /** + * Returns the size (number of external elements) in the given document + * + *@param aDocument - Document Pointer + *@return number of external elements + */ + IMPORT_C TInt GetExternalListSize(CSvgDocumentImpl* aDocument); + + /** + * Given an index number and a document handle returns an external resource uri associated + * with an element + *@param aDocument - Document Pointer index - index in external list + *@return URI + */ + IMPORT_C void GetExternalListItemL( + CSvgDocumentImpl* aDocument, TInt aIndex, TPtrC16& aUri); + + /** + * Given a document handle and a url this call attaches + * the given data (ldata) to every element that references that url + * + *@param aDocument - Document Pointer + *@param lUrl- uri string that is an external resource to be retrieved + *@param ldata - byte array containing the data that that external resource recieved + *@return none + * NULL if image-decoding is not initiated. + */ + IMPORT_C CSvgElementImpl* AddExternalData( CSvgDocumentImpl* aDocument, + const TDesC& aUri, + const TDesC8& aData, + TBool aMakeCopy = EFalse, + TInt aSize = 0, + TInt aEngine = NULL ); + + /** + * Create an instance of a CSvgEngineImpl. + * + *@param : None + *@return Pointer to CSvgEngineImpl object if creation is succesful, otherwise + * the function leaves. + */ + IMPORT_C CSvgEngineImpl* SvgEngineNewL(); + + /** + * Intialize the given SVG Engine. + * + *@param : aEngine -- SVG Engine. + *@return None + */ + IMPORT_C void StartEngine( CSvgEngineImpl* aEngine ); + IMPORT_C void RenderFrame( CSvgEngineImpl* aEngine, TUint aCurrentTime ); + + IMPORT_C void ViewportInit( CSvgDocumentImpl* aDocumentHandle ); + + /** + * Set the GDI context for the given SVG Engine. + * + *@param : aEngine -- SVG Engine. + *@param : aFrameBuffer -- Bitmap to become gdi context. + *@return None + */ + IMPORT_C void SetGdiContextL( CSvgEngineImpl* aEngine, CFbsBitmap* aFrameBuffer ); + + /** + * Associate the given document with the given engine. + * + *@param : aEngine -- SVG Engine. + *@param : aDocument -- SVG Document + *@return None + */ + IMPORT_C void SetDocument( CSvgEngineImpl* aEngine, CSvgDocumentImpl* aDocument ); + void SvgElementAssignDocument( CSvgElementImpl* aElement, CSvgDocumentImpl* aDoc ); + + /** + * Create an empty instance of a SVG document. + * + *@param : aEngine -- SVG Engine. + *@param : aDocument -- SVG Document + *@return Svg Document if successful, otherwise the function leaves. + */ + IMPORT_C CSvgDocumentImpl* SvgDocumentNewL(); + + /** + * Fill a SVG document by parsing the given byte array. + * + *@param : aEngine -- SVG Engine. + *@param : aDocument -- SVG Document + *@return None if successful, otherwise the function leaves. + */ + IMPORT_C void FillDocumentL( CSvgDocumentImpl* aDocument, const TDesC16& aByteData ); + + /** + * Destroy the given SVG document + * + *@param : aDocument -- SVG document. + *@return None . + */ + IMPORT_C void DestroyDocument( CSvgDocumentImpl* aDocument ); + + /** + * Destroy the given SVG engine + * + *@param : aEngine -- SVG Engine. + *@return None . + */ + IMPORT_C void DestroyEngine( CSvgEngineImpl* aEngine ); + + /** + * Return the root element of the given document. + * + *@param : aDocument -- SVG document. + *@return root element . + */ + IMPORT_C CXmlElementImpl* GetRootElement( CSvgDocumentImpl* aDocument ); + + /** + * Set a default SvgSvg root element of the given document. + * + *@param : aDocument -- SVG document. + *@return void. + */ + IMPORT_C void InitRootElement( CSvgDocumentImpl* aDocument ); + + /** + * Return the root element of the given document. + * + *@param : aDocument -- SVG document. + *@param : aId -- id string to search for element. + *@return element with given id . + */ + IMPORT_C CXmlElementImpl* GetElementById( CSvgDocumentImpl* aDocument, const TDesC& aId ); + + /** + * Return the number of ids in a given document + * + *@param : aDocument -- SVG document. + *@return number of ids found. + */ + IMPORT_C TInt GetNumberOfIds( CSvgDocumentImpl* aDocument ); + + /** + * Return the id at from the document at index + * + *@param : aDocument -- SVG document. + *@param : index -- which id to return + *@param : myId -- id string to return by reference. + *@return none + */ + IMPORT_C TDesC* GetId( CSvgDocumentImpl* aDocument, TInt index ); + + /** + * Return parent element of the given element. + * + *@param : aElement -- SVG element. + *@return element with given child. + */ + IMPORT_C CXmlElementImpl* GetParentElement( CXmlElementImpl* aElement ); + + /** + * Set parent element for the given element. + * + *@param : aElement -- SVG element. + *@param : aParentElement -- SVG parent element. + *@return void + */ + IMPORT_C void SetParentElement( CXmlElementImpl* aElement, CXmlElementImpl* aParentElement ); + + /** + * Set the first child for the given element. + * + *@param : aFirstChildElement -- SVG element. + *@param : aParentElement -- SVG parent element. + *@return void + */ + IMPORT_C void SetFirstChildElement( CXmlElementImpl* aFirstChildElement, CXmlElementImpl* aParentElement ); + + + /** + * Create an element of the given type. + * + *@param : aDocument -- SVG element document. + *@param : aElementType -- SVG element type. + *@return element. + */ + IMPORT_C CXmlElementImpl* CreateElementL( CSvgDocumentImpl* aDocument, TInt aElementType ); + + /** + * Create an element of the given type. + * + *@param : aDocument -- SVG element document. + *@param : aElementType -- SVG element type. + *@return element. + */ + IMPORT_C void DestroyElement( CXmlElementImpl* aElement ); + + /** + * Append the given child element to the given parent element. + * + *@param : aParentElement -- SVG parent element. + *@param : aChildElement -- SVG child element. + *@return None. + */ + IMPORT_C void AppendChild( CXmlElementImpl* aParentElement, CXmlElementImpl* aChildElement, TBool aIsJSR226Element = EFalse); + + /** + * Remove the given child element from the given parent element. + * + *@param : aParentElement -- SVG parent element. + *@param : aChildElement -- SVG child element. + *@return None. + */ + IMPORT_C void RemoveChild( CXmlElementImpl* aParentElement, CXmlElementImpl* aChildElement); + + /** + * Get the first child element in the given parent. + * + *@param : aParentElement -- SVG parent element. + *@return The first child element. + */ + IMPORT_C CXmlElementImpl* GetFirstChild( CXmlElementImpl* aParentElement ); + + /** + * Get the next sibling element of the given element. + * + *@param : aElement -- SVG element. + *@return The next sibling element. + */ + IMPORT_C CXmlElementImpl* GetNextSibling( CXmlElementImpl* aElement ); + + /** + * Set the next sibling element for the given element. + * + *@param : aElement -- SVG element. + *@param : aSibling -- SVG sibling element. + *@return None + */ + IMPORT_C void SetNextSibling( CXmlElementImpl* aElement, CXmlElementImpl* aSibling ); + + /** + * Get the document that is associated with the given element. + * + *@param : aElement -- SVG element. + *@return svg document. + */ + IMPORT_C CSvgDocumentImpl* GetOwnerDocument( CXmlElementImpl* aElement ); + + /** + * Get the element type, such as rect, circle, etc. for the given element. + * + *@param : aElement -- SVG element. + *@return element type + */ + IMPORT_C TInt GetElementType( CXmlElementImpl* aElement ); + + /** + * Set the given request-observer for the given svg engine. + * + *@param : aElement -- SVG element. + *@return element type + */ + IMPORT_C void SetRequestObserver( CSvgEngineImpl* aEngine, MSvgRequestObserver* aObserver ); + + /** + * Get the Bounding Box for an element. + * + *@param : aElementHandle -- SVG element. + *@param : aX -- X coordinate for the top left. + *@param : aY -- Y coordinate for the top left. + *@param : aWidth -- Width of the bounding rectangle. + *@param : aHeight -- Height for the bounding rectangle. + *@return None. + */ + IMPORT_C void GetElementBoundingbox(CSvgElementImpl* aElementHandle,TReal32& aX ,TReal32& aY,TReal32& aWidth,TReal32& aHeight) __SOFTFP; + + /** + * Get the unscaled Bounding Box for an element. + * + *@param : aElementHandle -- SVG element. + *@param : aX -- X coordinate for the top left. + *@param : aY -- Y coordinate for the top left. + *@param : aWidth -- Width of the bounding rectangle. + *@param : aHeight -- Height for the bounding rectangle. + *@return None. + */ + + IMPORT_C void GetElementUnScaledBoundingBox( CSvgElementImpl* aElementHandle,TReal32& aX ,TReal32& aY,TReal32& aWidth,TReal32& aHeight) __SOFTFP; + + /** + * Get the Bounding Box for an element. + * + *@param : aElementHandle -- SVG element. + *@param : aPoint1 -- coordinate for the top left. + *@param : aPoint2 -- coordinate for the top right. + *@param : aPoint3 -- coordinate for the bottom left. + *@param : aPoint4 -- coordinate for the bottom right. + *@return None. + */ + IMPORT_C void GetFourPointElementBoundingBox(CSvgTextElementImpl* aElementHandle,TPoint& aPoint1 ,TPoint& aPoint2,TPoint& aPoint3,TPoint& aPoint4); + + /** + * Get the Float attribute for the element. + * + *@param : aElementHandle -- SVG element. + *@param : aAttribute Id the attribute Id corresponding to the attribute. + *@return The float attribute value. + */ + IMPORT_C TReal32 GetElementFloatAttribute( CSvgElementImpl* aElementHandle, const TInt aAttributeId) __SOFTFP; + + /** + * Set the Float attribute for the element. + * + *@param : aElementHandle -- SVG element. + *@param : aAttribute Id the attribute Id corresponding to the attribute. + *@param : aValue the value to for the float attribute to be set. + *@return None. + */ + IMPORT_C void SetElementFloatAttribute( CSvgElementImpl* aElementHandle, const TInt aAttributeId, TReal32 aValue) __SOFTFP; + + /** + * Set the Descriptor attribute for the element. + * + *@param : aElementHandle -- SVG element. + *@param : aAttribute Id the attribute Id corresponding to the attribute. + *@param : aAttributeValue the value to for the Desc attribute to be set. + *@return None. + */ + IMPORT_C void SetElementDesAttribute(CSvgElementImpl* aElementHandle,const TInt aAttributeId, const TDesC& aAttributeValue); + + /** + * Get the Desc attribute for the element. + * + *@param : aElementHandle -- SVG element. + *@param : aAttribute Id the attribute Id corresponding to the attribute. + *@param : aValue . reference to the attribute value. + *@return : None. + */ + IMPORT_C TInt GetElementDesAttribute(CSvgElementImpl* aElementHandle,const TInt aAttributeId,TPtrC16& aValue); + + /** + * Set the Color attribute for the element. + * + *@param : aElementHandle -- SVG element. + *@param : aAttribute Id the attribute Id corresponding to the attribute. + *@param : aColorValue The Integer value corresponding to the color. + *@return None. + */ + IMPORT_C void SetElementColorAttribute(CSvgElementImpl* aElementHandle,const TInt aAttributeId,TInt32 aColorValue); + + /** + * Get the CoLor attribute for the element. // this basically means the fill and stroke. + * + *@param : aElementHandle -- SVG element. + *@param : aAttribute Id the attribute Id corresponding to the attribute. + *@return : Integer containing the RGB value for the color. + */ + IMPORT_C TInt32 GetElementColorAttribute(CSvgElementImpl* aElementHandle,const TInt aAttributeId); + + /** + * Get the Enum attribute for the element. // this basically means the fill and stroke. + * + *@param : aElementHandle -- SVG element. + *@param : aAttribute Id the attribute Id corresponding to the attribute. + *@param : Integer containing the enum value for the attribute. + */ + IMPORT_C void SetEnumAttribute(CSvgElementImpl* aElementHandle,const TInt aAttributeId,TInt32 lValue); + + /** + * Set the preserve aspect ratio setting for the current document + * + *@param : aDocumentHandle + *@param : TPreserveAspectRatio a preserve aspect ratio setting + */ + IMPORT_C void SetPreserveAspectRatio( CSvgDocumentImpl* aDocument, TSvgPreserveAspectAlignType aPreserveAspectSetting, TSvgMeetOrSliceType aSmilFitSetting, TBool aFrameBufferOverridesViewport = EFalse ); + + /** + * Set the Enum attribute for the element. // this basically means the fill and stroke. + * + *@param : aElementHandle -- SVG element. + *@param : aAttribute Id the attribute Id corresponding to the attribute. + *@return : Integer containing the enum value for the attribute. + */ + IMPORT_C TInt GetEnumAttribute(CSvgElementImpl* aElementHandle,const TInt aAttributeId,TInt32& lValue); + /** + * Get the rect values. + * + *@param : aElementHandle, aX, aY, aWidth, aHeight + *@return TBool a viewbox existed + */ + IMPORT_C TBool GetRectAttribute( CXmlElementImpl* aElementHandle, + float* aX, float* aY, float* aWidth, float* aHeight ); + + /** + * Set the rect values. + * + *@param : aElementHandle, aX, aY, aWidth, aHeight + *@return none + */ + IMPORT_C void SetRectAttribute( CXmlElementImpl* aElementHandle, + float aX, float aY, float aWidth, float aHeight ); + + /** + * Get the matrix values. + * + *@param : aElementHandle, aAVal, aBVal, aCVal, aDVal, aEVal, aFVal + *@return none + */ + IMPORT_C void GetMatrixAttribute( CXmlElementImpl* aElementHandle, float* aAVal, + float* aBVal, float* aCVal, float* aDVal, + float* aEVal, float* aFVal ); + + /** + * Get the matrix values for a given matrix type. + * + *@param : aElementHandle, aAVal, aBVal, aCVal, aDVal, aEVal, aFVal + *@return none + */ + IMPORT_C void GetMatrixAttribute( CXmlElementImpl* aElementHandle, TInt aAttributeType, + float* aAVal, float* aBVal, + float* aCVal, float* aDVal, + float* aEVal, float* aFVal ); + + /** + * Set the matrix values. + * + *@param : aElementHandle, aAVal, aBVal, aCVal, aDVal, aEVal, aFVal + *@return none + */ + IMPORT_C void SetMatrixAttribute( CXmlElementImpl* aElementHandle, float aAVal, + float aBVal, float aCVal, float aDVal, + float aEVal, float aFVal ); + + /** + * Get the Viewport Width . + * + *@param : aDocumentHandle + *@return TInt integer containing the width of the viewport. viewport means + * svg element. + */ + IMPORT_C TInt GetViewportWidth( CSvgDocumentImpl* aDocumentHandle ); + + /** + * Get the Viewport Height. + * + *@param : aDocumentHandle + *@return TInt integer containing the Height of the viewport. Viewport means + * svg Element. + */ + IMPORT_C TInt GetViewportHeight( CSvgDocumentImpl* aDocumentHandle ); + + /** + * Set the Viewport Width. + * + *@param : aDocumentHandle + *@param TInt integer containing the Width of the viewport. Viewport means + * svg Element. + *@return none + */ + IMPORT_C void SetViewportWidth( CSvgDocumentImpl* aDocumentHandle, TInt aWidth ); + + /** + * Set the Viewport Height. + * + *@param : aDocumentHandle + *@param TInt integer containing the Height of the viewport. Viewport means + * svg Element. + *@return none + */ + IMPORT_C void SetViewportHeight( CSvgDocumentImpl* aDocumentHandle, TInt aHeight ); + + /** + * Get the Viewport Units. This means the units in which the width and height of + * element are specified. + * + *@param : aDocumentHandle + *@return TInt integer containing the units. + */ + IMPORT_C TInt GetViewportUnits( CSvgDocumentImpl* aDocumentHandle ); + + /** + * Set the end time for an animation element. + * + *@param : aElementHandle + *@param : aOffsetTime + *@return none. + */ + IMPORT_C void SvgEndElementAt(CXmlElementImpl* aElementHandle , TUint32 aOffsetTime, CSvgDocumentImpl* aDocumentHandle = NULL); + + /** + * Set the Begin time for an animation element. + * + *@param : aElementHandle + *@param : aOffsetTime + *@return none. + */ + IMPORT_C void SvgBeginElementAt(CXmlElementImpl* aElementHandle , TUint32 aOffsetTime, CSvgDocumentImpl* aDocumentHandle = NULL); + /** + * Sets the Media time for a Document. + * + *@param : aDocumentHandle + *@param : aTimeInMilliSeconds. This represents the time in milliseconds. + *@return none. + */ + IMPORT_C void SvgSetMediaTime(CSvgDocumentImpl* aDocumentHandle ,TUint32 aTimeInMilliSeconds); + + /** + * Gets the Media time for a Document. + * + *@param : aDocumentHandle + *@return TReal32 . Media time in seconds. + */ + IMPORT_C TReal32 SvgGetMediaTime(CSvgDocumentImpl* aDocumentHandle ) __SOFTFP; + + /** + * checks whether the document has any animation elements present. + * + *@param : aDocumentHandle + *@return TBool . ETrue if animation present otherwise EFalse. + */ + IMPORT_C TBool SvgHasAnimation(CSvgDocumentImpl* aDocumentHandle ); + + + /** + * Return true if element is removeable (no id or children with ids) + * + *@param : aElement -- SVG element. + *@return true if removeable false if not removeable + */ + IMPORT_C TBool IsRemoveable( CSvgElementImpl* hElement, TBool aCheckSibling = EFalse ); + + /** + * Return true if element is removeable (no id or children with ids) + * + *@param : aElement -- SVG element. + *@return true if removeable false if not removeable + */ + IMPORT_C TBool IsElementActive( CSvgElementImpl* hElement ); + + /** + * returns the pointer to the focussed element. + * + *@param : None. + *@return : CXmlElementImpl* pointer to the focussed element at present. + */ + IMPORT_C CXmlElementImpl* GetFocusedElement(CSvgDocumentImpl* aDocument); + + /** + * Sets the focus on a specific element. + * + *@param : aElement. + *@return : None. + */ + IMPORT_C void SetFocusElement(CXmlElementImpl* aElement, CSvgDocumentImpl* aDocument); + + /** + * checks whether a given element is present in DOM. + * + *@param : aDocument. this is pointer to the document which is to be searched for the presence + * of the element. + *@param : aElement. This represents the pointer to the element. + *@return : TBool. True if element is present otherwise false. + */ + IMPORT_C TBool SVGElementInDom(CSvgDocumentImpl* aDocument, CXmlElementImpl* aElement); + + /** + * This API will start the animation if the focussed object is an animation element. + * + *@param : aDocument. This is a pointer to the document. ?? this may not be needed. + *@return : None. + */ + IMPORT_C void SvgActivateAnimation(CSvgDocumentImpl* aDocument); + + /** + * SVGElement_GetUsedElement :- This API will return a pointer to the original + * element which was cloned to use it. i.e.the cloned element is made a chld of the + * element. + * @param : aElement :- this is handle to the cloned element. this is child of the + * : element. + * @return : CXmlElementImpl* this is the pointer to the actual element, which is + * cloned. + */ + IMPORT_C CXmlElementImpl* SVGElementGetUsedElement(CXmlElementImpl* aElement); + + /** + * This API will add the given element to the event receiver list. + * + *@param : aElement. This is pointer to the element which is to be added. + *@param : aEventMask. This is the event mask. + *@return : None. + */ + IMPORT_C void AddToEventReceiverList(CXmlElementImpl* aElement, const TUint8 aEventMask); + + /** + * This API will remove the given element to the event receiver list. + * + *@param : aElement. This is pointer to the element which is to be removed. + *@param : aEventMask. This is the event mask. + *@return : None. + */ + IMPORT_C void RemoveFromEventReceiverList(CXmlElementImpl* aElement); + + /** + * DispatchMouseEventsAt This will send mouse events to the Engine at this points. + * + *@param : aDocumentHandle. which document should get the engine. + *@param : aMouseX. X coordinate for the mouseEvents + *@param : aMouseY. Y coordinate for the mouseEvents + *@return : int. + */ + IMPORT_C TInt DispatchMouseEventsAt(CSvgDocumentImpl* aDocumentHandle, TInt aMouseX, TInt aMouseY, MSvgMouseListener* aListener); + + /** + * SvgCreatePath his will create a new empty path. + * + *@param : None. + *@return : None. + */ + IMPORT_C CGfxGeneralPath* SvgCreatePath(); + + /** + * SvgDestroyPath this will delete a path given a pointer to it. + * + *@param : aPathHandle. Path element pointer. + *@return : None. + */ + IMPORT_C void SvgDestroyPath(CGfxGeneralPath* aPathHandle); + + /** + * GetSegmentCount Returns the number of segments in a PATH. + * + *@param : aPathHandle. Path element pointer. + *@return : integer representing the number of segments. + */ + IMPORT_C TInt GetSegmentCount(CGfxGeneralPath* aPathHandle); + + /** + * GetSegmentType Returns the segment type for a specific segment in a path element. + * + *@param : aPathHandle. Path element pointer. + *@param : aSegmentIndex , Segment index for the specific segments. + *@return : integer representing the type of segments. + */ + IMPORT_C TInt GetSegmentType(CGfxGeneralPath* aPathHandle, TInt aSegmentIndex); + + /** + * GetSegmentParameter Returns the segment parameter for a specific segment in a path element. + * + *@param : aPathHandle. Path element pointer. + *@param : aSegmentIndex , Segment index for the specific segments. + *@param : aSegmentParameterIndex. This gives the segment parameter index. + *@return : TReal32 representing the segment parameter. + */ + IMPORT_C TReal32 GetSegmentParameter(CGfxGeneralPath* aPathHandle,TInt aSegmentIndex,TInt aSegmentParameterIndex) __SOFTFP; + + /** + * ADDMoveTo Adds a moveTo segment to a path element. + * + *@param : aPathHandle. Path element pointer. + *@param : aX , x coordinate for the MoveTo command. + *@param : aY. Y coordinate for the MoveTo command. + *@return : None. + */ + IMPORT_C void ADDMoveTo(CGfxGeneralPath* aPathHandle, TReal32 aX,TReal32 aY) __SOFTFP; + + /** + * ADDLineTo Adds a LineTo segment to a path element. + * + *@param : aPathHandle. Path element pointer. + *@param : aX , x coordinate for the LineTo command. + *@param : aY. Y coordinate for the LineTo command. + *@return : None. + */ + IMPORT_C void ADDLineTo(CGfxGeneralPath* aPathHandle,TReal32 aX,TReal32 aY) __SOFTFP; + + /** + * ADDQuadTo Adds a QuadTo segment to a path element. + * + *@param : aPathHandle. Path element pointer. + *@param : aX1 , X coordinate for the first control point. + *@param : aY1 , Y coordinate for the first control point. + *@param : aX2 , X coordinate for the end point. + *@param : aY2 , Y coordinate for the end point. + *@return : None. + */ + IMPORT_C void ADDQuadTo(CGfxGeneralPath* aPathHandle,TReal32 aX1,TReal32 aY1,TReal32 aX2,TReal32 aY2) __SOFTFP; + + /** + * ADDCurveTo Adds a curveTo segment to a path element. + * + *@param : aPathHandle. Path element pointer. + *@param : aX1 , X coordinate for the first control point. + *@param : aY1 , Y coordinate for the first control point. + *@param : aX2 , X coordinate for the second control point. + *@param : aY2 , Y coordinate for the second control point. + *@param : aX3 , X coordinate for the end point. + *@param : aY3 , Y coordinate for the end point. + *@return : None. + */ + IMPORT_C void ADDCurveTo(CGfxGeneralPath* aPathHandle,TReal32 aX1,TReal32 aY1,TReal32 aX2,TReal32 aY2, TReal32 aX3, TReal32 aY3) __SOFTFP; + + /** + * ADDCloseTo Closes a given path element. + * + *@param : aPathHandle. Path element pointer. + *@return : None. + */ + + IMPORT_C void ADDCloseTo(CGfxGeneralPath* aPathHandle); + + /** + * GetPathAttribute gets a pointer to the path attribuite for a given element. + * + *@param : aElementHandle. Svg element pointer. + *@param : aAttributeId. This gives you the attributeId for the element to get. + *@return : CGfxGeneralPath* this gives you the path attribute pointer fetched. + */ + IMPORT_C CGfxGeneralPath* GetPathAttribute(CXmlElementImpl* aElementHandle, TInt aAttributeId); + + /** + * SetPathAttribute sets the path attribute for a given element. + * + *@param : aElementHandle. Svg element pointer. + *@param : aAttributeId. This gives you the attributeId for the element to get. + *@param : PathHandle this gives you the path attribute pointer fetched. + *@return : NONE. + */ + IMPORT_C void SetPathAttribute(CSvgElementImpl* aElementHandle, TInt lSvgAttrId, CGfxGeneralPath* aPathHandle); + + /** + * Change the frame Buffer dynamically + * + * + * + *@aRenderBuffer :- Buffer for drawing the DOM Tree. + */ + IMPORT_C void SetFrameBuffer(CFbsBitmap* aRenderBuffer, TInt aEngine = NULL); + + IMPORT_C void ClearFrameBuffer(CFbsBitmap* aFrameBuffer, TUint32 aClearingColor, TInt aEngine = NULL); + + /** + * Search for all occurrences of a string in the current svg document, + * in the cdata of the elements. The bounding-boxes are transformed, + * accounted for zooming/panning. + * + * + *@param : aSearchString -- String to search + *@param : aBoundingBoxes -- Array to contain the bounding boxes of texts found. + * The bounding boxes are already transformed so that they're related + * to the frame buffer origin. + *@param : aTexts -- Array to contain cdata of the elements containing + * the search-string. + *@param : aCaseSensitive -- Flag to indicate whether to search with case-sensitivity + * or not, defaults to ETrue. + *@return ETrue if at least one occurrence is found, EFalse otherwise. + */ + IMPORT_C TBool SearchForText( const TDesC& aSearchString, + RPointerArray& aBoundingBoxes, + RArray& aTexts, + RArray& aElementIds, + TBool aCaseSensitive = ETrue, + TInt aEngine = NULL ); + + /** + * Add a HyperlinkListener to the SVG Engine.. + * + *@param : aListener -- HyperlinkListener to receive callbacks. + *@return None + */ + IMPORT_C void AddHyperlinkListener( MSvgHyperlinkListener* aListener, TInt aEngine = NULL ); + + /** + * Add a TextAreaListener to the SVG Engine.. + * + *@param : aListener -- TextAreaListener to receive callbacks. + *@return None + */ + IMPORT_C TBool AddTextAreaListener( MSvgTextAreaListener* aListener, TInt aEngine = NULL ); + + /** + * Remove a TextAreaListener from the SVG Engine.. + * + *@param : aListener -- TextAreaListener to receive callbacks. + *@return None + */ + IMPORT_C TBool RemoveTextAreaListener( MSvgTextAreaListener* aListener, TInt aEngine = NULL ); + + /** + * Add a TextListener to the SVG Engine.. + * + *@param : aListener -- TextListener to receive callbacks. + *@return None + */ + IMPORT_C TBool AddTextListener( MSvgTextListener* aListener, TInt aEngine = NULL ); + + /** + * Remove a TextListener from the SVG Engine.. + * + *@param : aListener -- TextListener to receive callbacks. + *@return None + */ + IMPORT_C TBool RemoveTextListener( MSvgTextListener* aListener, TInt aEngine = NULL ); + + + /** + * Add a text string to a text area + * + *@param : aTextAreaElementId, aString + *@return ETrue EFalse + */ + IMPORT_C TBool SetTextForTextAreaElement( TInt aTextAreaElementId, TDesC& aXmlString ); + + /** + * Get the entire text string from the specified text area + * + *@param : aTextAreaElementId, is text area editable, aString + *@return is text area editable + */ + IMPORT_C TBool GetTextForTextAreaElement( TInt aTextAreaElementId, TBool& editable, TDes& aXmlString ); + + /** + * Add a text string to a text element + * + *@param : aTextElementId, aString + *@return ETrue EFalse + */ + IMPORT_C TBool SetTextForTextElement( TInt aTextElementId, TDesC& aXmlString ); + + /** + * Get the entire text string from the specified text element + * + *@param : aTextElementId, is text editable, aString + *@return is text editable + */ + IMPORT_C TBool GetTextForTextElement( TInt aTextElementId, TBool& editable, TDes& aXmlString ); + + /** + * Remove a HyperlinkListener from the SVG Engine.. + * + *@param : aListener -- HyperlinkListener to receive callbacks. + *@return None + */ + IMPORT_C void RemoveHyperlinkListener( MSvgHyperlinkListener* aListener, TInt aEngine = NULL ); + + /** + * Add a HyperlinkListener to the SVG Engine.. + * + *@param : aListener -- HyperlinkListener to receive callbacks. + *@return None + */ + IMPORT_C void AddAnimationListener( MSvgAnimationListener* aListener, TInt aEngine = NULL ); + + /** + * Remove a HyperlinkListener from the SVG Engine.. + * + *@param : aListener -- HyperlinkListener to receive callbacks. + *@return None + */ + IMPORT_C void RemoveAnimationListener( MSvgAnimationListener* aListener, TInt aEngine = NULL ); + + /** + * Return whether an element is visible on the frame buffer. + * + *@param : aElementHandle -- an SVG element identifier. + *@return ETrue if element is visible, EFalse otherwise. + */ + IMPORT_C TBool IsElementVisible( TInt aElementHandle, TInt aEngine = NULL ); + + /** + * Set the engine to load SVG contents as thumbnails: + * a) Only DRM protected contents are affected by this API. + * b) In thumbnail mode, DRM rights in not consumed. + * c) In thumbnail mode, the svg contents are drawn only + * to frame-buffers of 64x64 or smaller. + * + *@param : aThumbNailMode -- Flag to turn on/off thumbnial mode. + *@return : none + */ + IMPORT_C void SetThumbNailMode( TBool aThumbNailMode, TInt aEngine = NULL ); + + /** + * Set the engine to enable/disable consuming DRM rights + * + *@param : aEnable -- Flag to turn off/on consuming rights + *@return: none + */ + IMPORT_C void SetDRMRights(TBool aEnable); + + /** + * Adds a text element to display the frames per second if isShowOn = true + * + *@param : isShowOn specified whether or not to display fps + *@return : frames per second in the engine + */ + IMPORT_C TReal FramesPerSecond(TBool isShowOn = EFalse, TInt aEngine = NULL) __SOFTFP; + + /** + * Used for testing purpose. + * + *@param : aCustomOption specified whether or not to use OpenVG implementation + *@return : none + */ + EXPORT_C void CustomOption(TBool aCustomOption = EFalse, TInt aEngine = NULL); + + // return an array with all of the elements of a certain type + // passing in a -1 for element id will return all elements + IMPORT_C void FindAllElements( CSvgElementImpl* aStartElement, TInt aElementId, + RPointerArray& aList, TInt aEngine = NULL ); + + + /** + * Create an svg element that can be added to the a document + * to draw the given rectangle. + * + *@param : aRect - rectangle to request element. + *@return : element represent rectangle. + */ + IMPORT_C CSvgElementImpl* DrawBox(TRect aRect, TInt aEngine = NULL); + + /** + * Return the default size of the given document handle, defined + * by the union of the bounding boxes of the elements. This function + * is independent of frame-buffer or any other document. + * + * @since 1.0 + * @param aDomHandle - Handle to svg document (thru PrepareDom) + * @return Size of svg content + */ + IMPORT_C TSize GetUnscaledContentSize( TInt aDomHandle ); + + /** + * Generate frames, defined by the given + * duration, delay per seconds, etc. The calling client will be + * responsible for managing the bitmaps created by this method that + * are appended to the given bitmap arrays. The starting frame can + * be specified with the starting time parameter. + * + * Note: Embedded images/svg files will not be rendered, due + * to asynchronous image decoder. + * + * Redundant frames removal is implemented, defaulted to EFalse. + * + * aDomHandle -- Handle to the svg dom. + * aDimensionOfBitmaps -- Size of bitmaps to generate (same for mask) + * aStartTime -- Start time of first frame (in milliseconds) + * aDuration -- Total time of animation (in milliseconds) + * aMillisecondsPerFrame -- Request delay time between each frame. + * aColorDepth -- Color display mode for main bitmaps + * aMaskType -- Color display mode for mask bitmaps + * aBitmapFrames -- Array to hold animation bitmaps + * aMaskFrames -- Array to hold mask bitmaps + * aDelayIntervals -- Delay interval between each frame (in milliseconds) + * aRemoveRedundantFrames -- If ETrue, remove consecutive frames that are the same + * and set the correct delay. + * Return Non-NULL Pointer to a svg error (MSvgError*) + */ + IMPORT_C MSvgError* RenderFrames( TInt aDomHandle, + const TSize& aDimensionOfBitmaps, + TUint aStartTime, + TUint aDuration, + TUint aMillisecondsPerFrame, + TDisplayMode aColorDepth, + TDisplayMode aMaskType, + RPointerArray& aBitmapFrames, + RPointerArray& aMaskFrames, + RArray& aDelayIntervals, + TBool aRemoveRedundantFrames = EFalse ); + + /** + * Used when creating an element from the java interface + * initializes all of the style properties attribute array to + * null for a newly created element so that attributes can be added + * to that element + * + *@param : aElementHandle -- an SVG element identifier. + *@return + */ + IMPORT_C void InitSvgStylePropertiesWithNullL( CSvgElementImpl* aElement ); + + /** + * Add a specific event listener to the engine + * + *@param : aListener, a listener type + *@return : none + */ + IMPORT_C void AddListener( const MSvgListener* aListener, TSvgListenerType aType, TInt aEngine = NULL ); + + /** + * Remove a specific event listener from the engine + * + *@param : aListener, a listener type + *@return : none + */ + IMPORT_C void RemoveListener( const MSvgListener* aListener, TSvgListenerType aType, TInt aEngine = NULL ); + + /** + * Request the given engine (or internal engine) to + * initialize from information in the svg-document attached + * to it (if any). This is used to setup the display information + * from the tag. Usually called from MSvgLoadingListener + * method when reached. If aEngine is NULL, then + * the internal engine is used. + * + * @since 1.0 + * @param : aEngine -- svg engine to request initialization. + * A NULL value, by default, indicates to use the internal + * engine for initialization. + * @param : aIsMainThread -- indicates whether this call is + * made in the "main thread" or not, default to ETrue. + * @return : none + */ + IMPORT_C void InitializeEngine( CSvgEngineImpl* aEngine = NULL, + TBool aIsMainThread = ETrue ); + + /** + * Set the timeout duration for fetching external data + * (Fetchimage calls). A value of zero, + * indicates no timeout (by default). This is designed mainly + * for SVGT Plugin. + * @param : aTimeoutSeconds -- + */ + IMPORT_C void SetDataRetrievalTimeOut( TUint aTimeoutSeconds, TInt aEngine = NULL ); + + /** + * Request canceling of parsing of the current document being + * parsed (through Load API). This API allows a different thread + * other than the loading thread to cancel a Load call. + * @since 1.0 + */ + IMPORT_C void CancelLoad( TInt aEngine = NULL ); + + /** + * Query wether a document is currently bieng parsed through + * the Load API. EFalse is returned when a document has completed + * parsing or CancelLoad has completed successfully. + * @since 1.0 + */ + IMPORT_C TBool IsLoading( TInt aEngine = NULL ); + + /** + * In _DEBUG mode all elements in the documents DOM will be printed out + * this method may be used in the future to regenerate the DOM tree + * could also be used as an encoder + * + *@param : aDocument + *@return : none + */ + IMPORT_C void PrintAllElements( CSvgDocumentImpl* aDocument ); + + /** + * In _DEBUG mode print all of the values that are in the styles + * for the element + * + *@param : aElement + *@return : none + */ + IMPORT_C void PrintElementsStyles( CSvgElementImpl* aElement ); + + /** + * Set to indicate whether the contents should be rendered + * or wait for all images in a content to be decoded, defaults + * to waiting for all images. + * + *@param : aBool -- indicates waiting for all images to finish + * decoding before drawing any content. + *@return : none + */ + IMPORT_C void WaitForImages( TBool aBool = ETrue, TInt aEngine = NULL ); + + /** + * This API provides a delayed (asynchronous) assignment of image + * data to elements. This is used when the clients + * returns a non-KErrNone value for FetchImage callback, so that + * FetchImage does not block the parsing thread. + * + *@param aUri- uri string that is passed by FetchImage, + * the URI of the image files. + *@param aData - byte array containing the image data to + * be decoded. This object will be managed (deleted) + * by svg-engine. + *@return none + */ + IMPORT_C void AssignImageData( const TDesC& aUri, HBufC8* aData ); + + /** + * This API provides API for client to set RWindow so that svgengine + * is aware of the window that client is using. This will benefit + * video rendering. + * + *@param aWindow- RWindowBase that retrieve from CCoeControl to derived + * classes. + *@return none + */ + IMPORT_C void SetClientWindow( RWindow* aWindow ); + + /** + * Method to output the currently loaded SVG content in standard SVG XML form + * or output a binary encoded version to a file + *@param aIsEncodeOn tell whether or not to output binary or standard SVG file. + *@return none + */ + IMPORT_C void SaveSvg( TBool aIsEncodeOn, const TDesC& aFileName, TInt aEngine ); + + /** + * This method sets the volume with user input as a percentage + * value (unsigned between 0 and 100 ) + * + * @since S60 3.1 + * @param aPercentage percentage value of volume + * @return none + */ + IMPORT_C void SetAudioVolume( TInt aPercentage , TInt aEngine = NULL); + + /** + * This method mutes the volume of the SVG content + * + * @since S60 3.1 + * @return none + */ + IMPORT_C void MuteAudioVolume( TInt aEngine = NULL ); + + /** + * This API provides client the functionality to trigger focus-in + * event for a particular element + * + * + *@param aDocumentHandle- Pointer to the document of type SvgDocumentImpl + * aElement- Pointer to the element for which focus needs to be set + * + *@return none + */ + IMPORT_C void DispatchFocusInEvent(CSvgDocumentImpl* aDocumentHandle,CSvgElementImpl *aElement); + + /** + * This API provides client the functionality to trigger focus-in + * event for a particular element + * + * + *@param aDocumentHandle- Pointer to the document of type SvgDocumentImpl + * aElement- Pointer to the element for which focus needs to be set + * + *@return none + */ + IMPORT_C void DispatchFocusOutEvent(CSvgDocumentImpl* aDocumentHandle,CSvgElementImpl *aElement); + IMPORT_C void ResetContext(TInt aEngine = NULL ); + + + protected: + /** + * This method is a special case "ConstructL" method used for polymorphic + * DLL loading, which enforces this method to be public. + * + * @since 1.0 + * @param : aFrameBuffer -- Bitmap to draw svg content. + * @param : aReqObserver -- Request observer called by svg engine. + * @return + */ + IMPORT_C void ConstructL( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec ); + //NGA :: ConstructL overload is added to include renderertype selector + IMPORT_C void ConstructL( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec ,SVGRendererId aRendererType ); + /** + * This method is a special case "ConstructL" method used for polymorphic + * DLL loading, which enforces this method to be public. + * + * @since 1.0 + * + * @return + */ + IMPORT_C void ConstructL(); + IMPORT_C void ConstructL(TFontSpec& aFontSpec); + + private: + + /** + * Adds a text element to display the frames per second if isShowOn = true + * + *@param : isShowOn specified whether or not to display fps + *@return : frames per second in the engine + */ + TReal FramesPerSecondL( TInt aEngine = NULL ); + + + /** + * Get the current focus object's bounding box. + * + * @since 1.0 + * @param ETrue - Get the next object + * @param EFalse - Get the previous object + * @return + */ + TRect GetFocusBbox(TBool aNextObject, TInt aEngine = NULL ); + + /** + * Checks whether the Handle is associated with a DOM + * + * @param : aHandle -- Handle to a DOM. + * @return: TBool boolean + */ + TBool IsDomCached(TInt aHandle); + + /** + * Request the SVG Engine to resume an animation after certain amount of time + * + * @since 1.0 + * @param : none + * @return : none + */ + void Resume(TInt32 aTime, TInt aEngine = NULL); + + /** + * Utility function to clean-up after loading a file -- mainly, + * removing the prepared dom from Dom-list, since it's loaded and + * more prepared. + * + * @since 1.0 + * @param : aDocumentHandle -- document info to handle clean up + * @return : none + */ + void PostLoadProcessing( TInt aDocumentHandle ); + + // + /** + * ImageLoadingObserver interface method. + * Called from Image loading class to notify image loading + * completion. + * + * @since 1.0 + * @param : aErrorStatus -- error status, if any + * @return : none + */ + void ImageLoadingCompleted( TInt aErrorStatus ); + + /******* DOM FUNCTIONALITY / ELEMENT TRAVERSAL INTERFACE *****/ + /** + * Returns the first child element node of this element. null if this element has no child elements + * + * @since 1.2 + * @param aParentElement - a handle to a parent element + * @return a handle to the first child of the parent element + */ + CSvgElementImpl* FirstElementChild(CSvgElementImpl* aParentElement); + + /** + * last child element node of this element. null if this element has no child elements + * + * @since 1.2 + * @param aParentElement - a handle to a parent element + * @return a handle to the first child of the parent element + */ + // + CSvgElementImpl* LastElementChild(CSvgElementImpl* aParentElement); + + /** + * Returns the next sibling element node of this element. null if this element has no element sibling nodes that come after this one in the document tree + * + * @since 1.2 + * @param aSiblingElement - a handle to a sibling element + * @return a handle to the sibling before the sibling passed in + */ + CSvgElementImpl* PreviousElementSibling(CSvgElementImpl* aSiblingElement); + + /** + * previous sibling element node of this element. null if this element has no element sibling nodes that come before this one in the document tree. + * + * @since 1.2 + * @param aParentElement - a handle to a sibling element + * @return a handle to the next sibling of the parameter element + */ + CSvgElementImpl* NextElementSibling(CSvgElementImpl* aSiblingElement); + + /** + * Return whether the two given bitmaps are the same. + * + * @since 1.0 + * @param : aBitmapA -- Bitmap A + * @param : aBitmapB -- Bitmap B + * @return : ETrue both bitmaps are the same. + */ + TBool AreBitmapsTheSame( CFbsBitmap& aBitmapA, CFbsBitmap& aBitmapB ); + + /** + * Create a new CFbsBitmap object with the specific size and color mode. + * + * @since 1.0 + * @param : aSize -- size of bitmap to create + * @param : aColorMode : Color mode to create bitmap + * @param : aError : Error object to hold error info, if an error occurs + * @return : Non-Null CFbsBitmap object if no error was encounter + */ + CFbsBitmap* CreateBitmapL( TSize aSize, TDisplayMode aColorMode, + CSvgErrorImpl& aError ); + + + /** + * This mathod restores some style properties back to the + * original value of the animatied elements' iSvgStyleProperties. + * + * @since S60 3.0 + * @return none + */ + void RestoreAnimStyleProperties( TInt aEngine = NULL ); + + CSvgEngineImpl* ChooseEngine( TInt aEngine ); + + //Utility method to write out the current SVG engine framebuffer to a file + void ConvertBitmapToFileL(CFbsBitmap* aBitmap, const TDesC& aText); + + protected: + // Current SvgEngine instance + CSvgEngineImpl* iSvgEngine; + // Current iSvgDocument through Load( ) method + CSvgDocumentImpl* iSvgLoadedDocument; + + // Flag to indicate if a content is present, to perform or + // ignore operations. + TBool iFileIsLoaded; + + + // Error object to pass back to clients, maintained by this object. + CSvgErrorImpl* iSvgError; + + // List of prepared DOMs (created by PrepareDom). + // Deleted by destructor or calling DeleteDom. + RPointerArray iSvgDocumentPointers; + RPointerArray iSvgEnginePointers; + + // Keeping track of rotation applied. + TReal32 iTotalRotation; + + public: + + IMPORT_C void Start(MSvgError*& aError, const TDesC8* aHeaderData , + CSvgEngineImpl* aEngine = NULL ); + + IMPORT_C void Start( const TDesC8* aHeaderData, CSvgEngineImpl* aEngine = NULL, + TBool aIsMainThread = ETrue); + private: + // DRM related + TBool iDrmEnabled; + + // Thumbnail mode + TBool iIsThumbNailMode; + + // DRM Rights consumption + TBool iDrmRightsConsumptionEnabled; + + // MSvgLoadingListener list + RPointerArray iSvgLoadingListeners; + + // Keep track of elements currently having mouse pointer inside + // to report mouse-exit when it is moved. + RPointerArray iSvgMouseEnteredElements; + + // Flag to indicate Load or PrepareDom call. + TBool iIsLoadingRequest; + + TBool iMouseDownFlag; + + //Stores Font Type information + CSvgBitmapFontProvider *iSvgBitmapFontProvider; + }; + +#endif // SVGENGINEINTERFACEIMPL_H diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/inc/SVGErrorImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/SVGErrorImpl.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,188 @@ +/* +* Copyright (c) 2003 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: SVG Engine header file + * +*/ + + +#ifndef SVGERROR_H +#define SVGERROR_H + +#if !defined(__E32BASE_H__) +#include +#endif + +#include "SVGEngineInterfaceImpl.h" + +/** + * This class implements the interface for a MSvgError object, which contains + * an error code and a description of the error if one exists. + * + * @lib SVGEngine.lib + * @since 1.0 + */ +class CSvgErrorImpl : public CBase, public MSvgError + { + public: + + /** + * Two-phase constructor. The default error code is ESvgNoError and description is + * "No Error" + * + * @since 1.0 + * @return : CSvgErrorImpl object + */ + static CSvgErrorImpl* NewL(); + + /** + * Two-phase constructor. The default error code is ESvgNoError and description is + * "No Error" + * + * @since 1.0 + * @return : CSvgErrorImpl object + */ + static CSvgErrorImpl* NewLC(); + + /** + * Destructor + */ + virtual ~CSvgErrorImpl(); + + /** + * Determine wether an error is indicated by this object. + * + * @since 1.0 + * @return : ETrue, if ErrorCode() != ESvgNoError + */ + TBool HasError(); + + /** + * Determine wether an error is only a warning. + * This should be a state when the svg may be display, despite + * a conflict. + * + * @since 1.0 + * @return ETrue if HasError() is only a warning. + */ + TBool IsWarning(); + + /** + * Set the flag to indicate the error indicated by this object + * is only a warning. + * + * @since 1.0 + * @return ETrue if HasError() is only a warning. + */ + + void SetIsWarning( TBool aBool ); + + /** + * Get the error code contained by this object. + * + * @since 1.0 + * @return : the TSvgErrorCode value + */ + TSvgErrorCode ErrorCode(); + + /** + * Get the error code contained by this object. + * + * @since 1.0 + * @return : the TSvgErrorCode value + */ + TInt SystemErrorCode(); + + /** + * Get the error description string for this object. + * + * @since 1.0 + * @return : error description string. + */ + TDesC& Description(); + + /** + * Set the error code. + * + * @since 1.0 + * @param aError : error code + * @return + */ + void SetErrorCode( TSvgErrorCode aError ); + + /** + * Set the error code. + * + * @since 1.0 + * @param aError : error code + * @return + */ + void SetSystemErrorCode( TInt aError ); + + /** + * Set the error description. + * + * @since 1.0 + * @param aDescription : error description string + * @return + */ + void SetDescription( const TDesC& aDescription ); + + /** + * Set the error description. + * + * @since 1.0 + * @param aText1 : error description string 1 + * @param aText2 : error description string 2 + * @return + */ + void SetDescription( const TDesC& aText1, const TDesC& aText2 ); + + /** + * Append the given text to the existing description . + * + * @since 1.0 + * @param aDescription : error description string + * @param aText2 : error description string 2 + * @return + */ + void AppendDescription( const TDesC& aDescription ); + + + protected: + /** + * Second phase of constructor + * + * @since 1.0 + */ + void ConstructL(); + + private: + + /** + * Constructor. The default error code is ESvgNoError and description is + * "No Error" + * + * @since 1.0 + */ + CSvgErrorImpl(); + + private: + TSvgErrorCode iErrorCode; + HBufC* iDescription; + TBool iIsWarning; + TInt iSystemErrorCode; + }; + +#endif + diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/inc/SVGHyperlinkListener.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/SVGHyperlinkListener.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,76 @@ +/* +* Copyright (c) 2003 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: SVG Engine header file + * +*/ + + +#ifndef __INC_MSVGHYPERLINKLISTENER__ +#define __INC_MSVGHYPERLINKLISTENER__ + + +/** + * This interface is the callback mechanism for the SVG Engine to communicate to + * interested clients about hyperlinks. The client (listener) is notified when + * a pointer has entered or exited a hyperlink and when a hyperlink is activated. + * + * @lib SVGEngine.lib + * @since 1.0 + */ +class MSvgHyperlinkListener + { + public: + + /** + * Notified when a pointer enters a hyperlink element. + * + * @since 1.0 + * @param : aUri -- URI string of hyperlink + * @return : For future use. Value is ignored. + */ + virtual TBool LinkEntered( const TDesC& aUri ) = 0; + + /** + * Notified when a pointer exits a hyperlink element. + * + * @since 1.0 + * @param : aUri -- URI string of hyperlink + * @return : For future use. Value is ignored. + */ + virtual TBool LinkExited( const TDesC& aUri ) = 0; + + /** + * This method is called to notify the client that a link has been + * activated. + * + * @since 1.0 + * @param : aUri -- URI string of hyperlink + * @return : For future use. Value is ignored. + */ + virtual TBool LinkActivated( const TDesC& aUri ) = 0; + + /** + * This method is called to notify the client that a link has been + * activated. When Show is also present . + * + * @since 1.0 + * @param : aUri -- URI string of hyperlink + * @param : aShow -- xlink:show value + * @return : For future use. Value is ignored. + */ + virtual TBool LinkActivatedWithShow( const TDesC& aUri, const TDesC& aShow ) = 0; + + }; + +#endif /*__INC_MSVGHYPERLINKLISTENER__*/ diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/SVGImageLoadingObserver.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2003 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: Image loading observe rinterface + * +*/ + + +#ifndef _INC_CSVGIMAGELOADINGOBSERVER_ +#define _INC_CSVGIMAGELOADINGOBSERVER_ + +/** + * Helping interface used as callback for image loading. + * + * @lib SVGEngine.lib + * @since 1.0 + */ +class MSVGImageLoadingObserver + { + public: + /** + * This method is called by the CSVGImageLoaderUtil object after + * a request (RequestForImageL) to load an image is made. + * The possible values for aErrorStatus include: + * KErrNone = no errors, + * KErrCancel = loading of image has been canceled + * + * @since 1.0 + * @param aErrorStatus : error status if any. + * @return + */ + virtual void ImageLoadingCompleted( TInt aErrorStatus ) = 0; + }; + +#endif + diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/inc/SVGRendererId.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/SVGRendererId.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,29 @@ +/* +* Copyright (c) 2003 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: SVG Engine header file + * +*/ + +#ifndef SVGRENDERERID_H +#define SVGRENDERERID_H + +enum SVGRendererId + { + ESVGRendererSW = 1, + ESVGRendererHW = 2, + ESVGRendererTLV = 3 + }; + +#endif /* SVGRENDERERID_H */ + diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/inc/SVGRequestObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/SVGRequestObserver.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,129 @@ +/* +* Copyright (c) 2003 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: SVG Engine header file + * +*/ + + +#ifndef __INC_MSVGREQUESTOBSERVER__ +#define __INC_MSVGREQUESTOBSERVER__ + + +class CSvgElementImpl; + + +/** + * This interface is the callback mechanism for the SVG Engine to communicate to + * interested clients and to request for external data, such as images. + * The callbacks will be active when the methods of this interace are implemented and + * the pointer to the implementation object is passed in as the second parameter + * of the 'ConstructL' method of the CSvgEngineInterface. A 'null' value may be + * passed-in if the callbacks are to be ignored. + * + * @lib SVGEngine.lib + * @since 1.0 + */ +class MSvgRequestObserver + { + public: + + /** + * This method is called by the SVG Engine when all data for a certain + * step, such as animation frame, have been updated. This usually means + * the off-screen image (passed in to 'ConstructL' of CSvgEngineInterface) + * has been updated. The client usually redraws the image onto + * the screen. + * + * @since 1.0 + * @param : none + * @return : none + */ + virtual void UpdateScreen() = 0; + + /** + * This method is for future extension, in which an external script engine + * could be used to evaluate a script description. + * + * @since 1.0 + * @param : aScript -- A description of script from the "on" attribute. + * + * @param : aCallerElement -- The element that calls the script by a + * an event of the "on" attribute. + * @return : For future use. Value is ignored. + */ + virtual TBool ScriptCall( const TDesC& aScript, + CSvgElementImpl* aCallerElement ) = 0; + + /** + * This method is called to retrieve the file handle of an image name. + * The session (RFs) object passed in is guaranteed to be connected, so + * the client must NOT call aSession.Connect(). + * + * The implementation for the client of this method is usually if not always: + * TInt X::FetchImage( const TDesC& aFilename, RFs& aSession, RFile& aFileHandle ) + * { + * // Check for "http", get data from remote site, save to disk + * // Get absolute path to aFilename: absolutepath + * return aFileHandle.Open( aSession, absolutepath, EFileRead ); + * } + * + * Note: Use EFileShareReadersOnly to prevent file locking. + * + * The API AssignImageData() can be used to avoid block the parsing + * thread due this method taking too long to return. This is + * accomplished by returning a non-KErrNone value (i.e. KErrNotFound), + * and storing the URI parameter. The image data then could be + * assigned the the URI in another thread/Active-Object. + * + * @since 1.0 + * @param : aUri -- the relative path of an image file. + * @param : aSession -- File session used by client to open file. + * @param : aFileHandle -- File handle used by client to open file. + * @return : KErrNone if Open command successful, otherwise error-code + * from Open command. The SVG engine will proceed loading the file + * only if the return value is KErrNone. + */ + virtual TInt FetchImage( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ) = 0; + + /** + * This method is called to retrieve the file handle of an svg font file. + * This file must be SVG 1.1 .svg file. When the engine comes acrossed + * a font-family name that it doesnt know it will request "fontfamilyname".svg + * file through this method. The client can either provide the svg file + * or the engine will default to system text. + * + * The usage of this method is exactly the same as the FetchImage method above + * + * @since 1.0 + * @param : aUri -- the relative path of an image file. + * @param : aSession -- File session used by client to open file. + * @param : aFileHandle -- File handle used by client to open file. + * @return : KErrNone if Open command successful, otherwise error-code + * from Open command. The SVG engine will proceed loading the file + * only if the return value is KErrNone. + */ + virtual TInt FetchFont( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ) = 0; + + /** + * This Method updates the presentation status + * @since 1.0 + * @param : TInt32& aNoOfAnimation + * @return : + */ + virtual void UpdatePresentation(const TInt32& aNoOfAnimation)=0; + + + }; + +#endif /*__INC_MSvgRequestObserver__*/ diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,2673 @@ +/* +* Copyright (c) 2004 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: SVG Engine header file + * +*/ + + + #ifndef _INC_SVGJAVAINTERFACEIMPL_ + #define _INC_SVGJAVAINTERFACEIMPL_ + +#if !defined(__E32BASE_H__) +#include +#endif + +#include +#include + +typedef int SvgEngineHandle; +typedef int SvgDocumentHandle; +typedef int SvgElementHandle; +typedef int SvgSurfaceHandle; +typedef int SvgPathHandle; +typedef short SvgAttrType; + +class CSvgEngineImpl; +class CSvgDocumentImpl; +class CFbsBitmap; + +// ***************************************************/ +//Find a way to get these values from SvgEngine and defined here in JavaInterface. +const TInt KSvgUnknownElement = -1; + +const TInt KSvgSvgElement = 0; + +const TInt KSvgAltglyphElement = 1; +const TInt KSvgAltglyphdefElement = 2; + +const TInt KSvgDefsElement = 3; +const TInt KSvgDescElement = 4; + +const TInt KSvgMetadataElement = 6; +const TInt KSvgTitleElement = 7; + +const TInt KSvgFontfacenameElement = 8; +const TInt KSvgFontfacesrcElement = 9; +const TInt KSvgFontfaceuriElement = 10; +const TInt KSvgGElement = 11; +const TInt KSvgGlyphrefElement = 12; +const TInt KSvgVkernElement = 13; +// const TInt KSvgScriptElement = 14; +const TInt KSvgSwitchElement = 15; + +const TInt KSvgViewElement = 16; + +const TInt KSvgHkernElement = 17; + +const TInt KSvgAElement = 18; +const TInt KSvgFontElement = 19; +const TInt KSvgFontfaceElement = 20; +const TInt KSvgGlyphElement = 21; +const TInt KSvgImageElement = 22; +const TInt KSvgMissingglyphElement = 23; +const TInt KSvgStyleElement = 24; +const TInt KSvgTextElement = 25; +const TInt KSvgUseElement = 26; +const TInt KSvgCircleElement = 27; +const TInt KSvgEllipseElement = 28; +const TInt KSvgLineElement = 29; +const TInt KSvgPathElement = 30; +const TInt KSvgPolygonElement = 31; +const TInt KSvgPolylineElement = 32; +const TInt KSvgRectElement = 33; +const TInt KSvgAnimateElement = 34; +const TInt KSvgAnimateColorElement = 35; +const TInt KSvgAnimateMotionElement = 36; +const TInt KSvgAnimateTransformElement = 37; +const TInt KSvgSetElement = 38; +const TInt KSvgMpathElement = 39; +const TInt KSvgLinearGradientElement = 40; +const TInt KSvgRadialGradientElement = 41; +const TInt KSvgStopElement = 42; +const TInt KSvgScriptElement = 43; +const TInt KSvgTextAreaElement = 44; +const TInt KSvgDiscardElement = 45; +const TInt KSvgSolidColorElement = 46; +const TInt KSvgAnimationElement = 47; +const TInt KSvgVideoElement = 48; +const TInt KSvgForeignObjectElement = 49; + + +/*************************************************/ +/*************************************************/ + const TInt KSvgUnknownAttribute = -1; + const TUint16 KSvgOffset =25; + //AA: Length or number type: range is 0 to +max & set using SetAttributeFloatL + const TUint16 KAtrTextLength = 0 + KSvgOffset; + const TUint16 KAtrWidth = 1 + KSvgOffset; + const TUint16 KAtrHeight = 2 + KSvgOffset; + const TUint16 KAtrR = 3 + KSvgOffset ; + + + + const TUint8 KSvgCoordAttrStartIndex = 4 + KSvgOffset; + const TUint16 KAtrRx = 4 + KSvgOffset; + const TUint16 KAtrRy = 5 + KSvgOffset; + const TUint16 KAtrHorizAdvX = 6 + KSvgOffset; + const TUint16 KAtrHorizOriginX = 7 + KSvgOffset; + const TUint16 KAtrHorizOriginY = 8 + KSvgOffset; + const TUint16 KAtrAscent = 9 + KSvgOffset; + const TUint16 KAtrDescent = 10 + KSvgOffset; + + const TUint16 KAtrAlphabetic = 11 + KSvgOffset; + const TUint16 KAtrUnderlinePosition = 12 + KSvgOffset; + const TUint16 KAtrUnderlineThickness = 13 + KSvgOffset; + const TUint16 KAtrOverlinePosition = 14 + KSvgOffset; + const TUint16 KAtrOverlineThickness = 15 + KSvgOffset; + const TUint16 KAtrStrikethroughPosition = 16 + KSvgOffset; + const TUint16 KAtrStrikethroughThickness = 17 + KSvgOffset; + const TUint16 KAtrUnitsPerEm = 18 + KSvgOffset; + + const TUint16 KAtrWordSpacing = 19 + KSvgOffset; + const TUint16 KAtrLetterSpacing = 20 + KSvgOffset; + + + + //AA: Coordinate datatype: range is -max to +max & set using SetAttributeFloatL + const TUint16 KAtrCx = 21 + KSvgOffset; + const TUint16 KAtrCy = 22 + KSvgOffset; + const TUint16 KAtrY = 23 + KSvgOffset; + const TUint16 KAtrX = 24 + KSvgOffset; + const TUint16 KAtrY1 = 25 + KSvgOffset; + const TUint16 KAtrY2 = 26 + KSvgOffset; + const TUint16 KAtrX1 = 27 + KSvgOffset; + const TUint16 KAtrX2 = 28 + KSvgOffset; + + const TUint8 KSvgCoordAttrEndIndex = 28 + KSvgOffset; + const TUint8 KSvgDesAttrsIndex = 29 + KSvgOffset; + + + //AA: Descriptor type set using SetAttributeDesL + const TUint16 KAtrK = 29 + KSvgOffset; + const TUint8 KSvgFloatAttrEndIndex = 29 + KSvgOffset; + const TUint16 KAtrG1 = 30 + KSvgOffset; + const TUint16 KAtrG2 = 31 + KSvgOffset; + const TUint16 KAtrU1 = 32 + KSvgOffset; + const TUint16 KAtrU2 = 33 + KSvgOffset; + const TUint16 KAtrUnicode = 34 + KSvgOffset; + const TUint16 KAtrGlyphName = 35 + KSvgOffset; + const TUint16 KAtrLang = 36 + KSvgOffset; + const TUint8 KSvgDesAttrEndIndex = 36 + KSvgOffset; + + const TUint16 KAtrTextDecoration = 37 + KSvgOffset; + const TUint16 KAtrTextAnchor = 38 + KSvgOffset; + const TUint16 KAtrRotate = 39 + KSvgOffset; + const TUint16 KAtrCdata = 40 + KSvgOffset; + + + + + const TUint16 KAtrTransform = 41 + KSvgOffset; + const TUint16 KAtrStyle = 42 + KSvgOffset; + const TUint16 KAtrFill = 43 + KSvgOffset; + const TUint16 KAtrStroke = 44 + KSvgOffset; + const TUint16 KAtrColor = 45 + KSvgOffset; + const TUint16 KAtrFrom = 46 + KSvgOffset; + const TUint16 KAtrTo = 47 + KSvgOffset; + const TUint16 KAtrBy = 48 + KSvgOffset; + const TUint16 KAtrAttributeName = 49 + KSvgOffset; + + + + const TUint8 KSvgNotHandledAttrsIndex = 50 + KSvgOffset; + + const TUint16 KAtrPathLength = 50 + KSvgOffset; + const TUint16 KAtrVersion = 51 + KSvgOffset; + const TUint16 KAtrStrokeWidth = 52 + KSvgOffset; + const TUint16 KAtrPoints = 53 + KSvgOffset; + const TUint16 KAtrD = 54 + KSvgOffset; + const TUint16 KAtrType = 55 + KSvgOffset; + const TUint16 KAtrStopColor = 56 + KSvgOffset; + const TUint16 KAtrFx = 57 + KSvgOffset; + const TUint16 KAtrFy = 58 + KSvgOffset; + + const TUint16 KAtrOffset = 59+ KSvgOffset; + const TUint16 KAtrSpreadMethods = 60 + KSvgOffset; + const TUint16 KAtrGradientUnits = 61 + KSvgOffset; + const TUint16 KAtrStopOpacity = 62 + KSvgOffset; + + + + +// special attributes for encoding + const TUint16 KAtrViewBox = 63 + KSvgOffset; + const TUint16 KAtrBaseProfile = 64 + KSvgOffset; + const TUint16 KAtrZoomAndPan = 65 + KSvgOffset; + const TUint16 KAtrPreserveAspectRatio = 66 + KSvgOffset; + + const TUint8 KSvgSVGAttrEndIndex = KAtrPreserveAspectRatio; + + const TUint16 KAtrId = 67 + KSvgOffset; + const TUint16 KAtrXmlBase = 68 + KSvgOffset; + + const TUint8 KSvgIdAndXmlAttrEndIndex = 68 + KSvgOffset; + + const TUint16 KAtrXmlLang = 69 + KSvgOffset; + const TUint16 KAtrXmlSpace = 70 + KSvgOffset; + + const TUint8 KSvgLangAttrEndIndex = 70 + KSvgOffset; + + const TUint16 KAtrRequiredExtensions = 71 + KSvgOffset; + const TUint16 KAtrRequiredFeatures = 72 + KSvgOffset; + const TUint16 KAtrSystemLanguage = 73 + KSvgOffset; + + const TUint8 KSvgTestAttrEndIndex = 73 + KSvgOffset; + + const TUint16 KAtrDx = 74 + KSvgOffset; + const TUint16 KAtrDy = 75 + KSvgOffset; + const TUint16 KAtrMedia = 76 + KSvgOffset; + const TUint16 KAtrTitle = 77 + KSvgOffset; + + const TUint16 KAtrXlinkactuate = 78 + KSvgOffset; + const TUint16 KAtrXlinkarcrole = 79 + KSvgOffset; + + const TUint16 KAtrXlinkrole = 80 + KSvgOffset; + const TUint16 KAtrXlinkshow = 81 + KSvgOffset; + const TUint16 KAtrXlinktitle = 82 + KSvgOffset; + const TUint16 KAtrXlinktype = 83 + KSvgOffset; + const TUint16 KAtrXlinkhref = 84 + KSvgOffset; + + const TUint8 KSvgUriAttrEndIndex = 84 + KSvgOffset; + + const TUint16 KAtrBegin = 85 + KSvgOffset; + const TUint16 KAtrDur = 86 + KSvgOffset; + const TUint16 KAtrRepeatCount = 87 + KSvgOffset; + const TUint16 KAtrRepeatDur = 88 + KSvgOffset; + const TUint16 KAtrEnd = 89 + KSvgOffset; + const TUint16 KAtrRestart = 90 + KSvgOffset; + const TUint16 KAtrAccumulate = 91 + KSvgOffset; + const TUint16 KAtrAdditive = 92 + KSvgOffset; + const TUint16 KAtrKeySplines = 93 + KSvgOffset; + const TUint16 KAtrKeyTimes = 94 + KSvgOffset; + const TUint16 KAtrCalcMode = 95 + KSvgOffset; + const TUint16 KAtrPath = 96 + KSvgOffset; + const TUint16 KAtrAnimateMotion = 97 + KSvgOffset; + const TUint16 KAtrGradientTransform = 98 + KSvgOffset; + const TUint16 KAtrAnimateTransformAttrId = 99 + KSvgOffset; + const TUint16 KAtrTarget = 100 + KSvgOffset; + + + +#define KSVG_MAX_ATTRIBUTES KAtrTarget +#define KSVG_ATTRIBUTE_NOT_SUPPORTED KSVG_MAX_ATTRIBUTES+1 + + // special Ids for Animation attribute Values + + const TUint16 KAnimFreeze = 110 + KSvgOffset; + + // special Id for Embedded image XLink:href attribute . + + const TUint16 KXlinkhrefImageEmbedded = 111 + KSvgOffset; + +// special Id for multiple end times.Used for the Binary compatibility of the encoder + + const TUint16 KMultipleEndTime = 112 + KSvgOffset; + + + + #define KSVG_ANIMATE_ELEMFLAG KAtrAttributeName + #define KSVG_SET_ELEMFLAG KAtrAttributeName + #define KSVG_ANIMATETRANSFORM_ELEMFLAG KAtrSVGTrf + #define KSVG_CIRCLE_ELEMFLAG KAtrR + #define KSVG_ELLIPSE_ELEMFLAG KAtrSVGElp + #define KSVG_RECT_ELEMFLAG KAtrSVGRec + #define KSVG_IMAGE_ELEMFLAG KAtrSVGRec + #define KSVG_HKERN_ELEMFLAG KAtrK + #define KSVG_PATH_ELEMFLAG KAtrD + #define KSVG_POLYLINE_ELEMFLAG KAtrPoints + #define KSVG_AMINATEMO_ELEMFLAG KAtrSVGAmo + + const TUint16 KAtrSVGRec = 120 + KSvgOffset; + const TUint16 KAtrSVGElp = 121 + KSvgOffset; + const TUint16 KAtrSVGTrf = 122 + KSvgOffset; + const TUint16 KAtrSVGAmo = 123 + KSvgOffset; + const TUint16 KAtrToBy = 124 + KSvgOffset; + const TUint16 KAtrAdditiveSet = 125 + KSvgOffset; + + + +const TUint16 KTiny = 0; + +// Display Enumeration Constants. take care +const TUint KDisplayEnumNone = 16; +const TUint KPresentationAttrDisplay = 10; + +const TUint16 KAtrUnicodeRange = 135 + KSvgOffset; +const TUint16 KAtrValues = 138 + KSvgOffset; + + +// SPECIAL (APPLICATION DEFINED) ATTRIBUTE CONSTANTS +const TUint16 KAtrData = KAtrD; // So KAtrData can still be used +const TUint16 KAtrRadius = KAtrR; // So KAtrRadius can still be used + +const TUint16 KAtrRefX = 1001; +const TUint16 KAtrRefY = 1002; +const TUint16 KAtrAnimMotionMatrixIndex = 5000; +const TUint16 KAtrAnimTransformMatrixIndex = 5001; + +const TInt KErrReferencedElementNotFound = -1000; +const TInt KErrAnimateReferenceElementNotFound = -1001; + +// start of new element in encoding. +const TUint16 KStartNewElem = 1000; + +// SVG TINY DEFINED ENUMERATIONS +const TUint16 KEnumPercent = 0; // '%' sign +const TUint16 KEnum100 = 1; +const TUint16 KEnum200 = 2; +const TUint16 KEnum300 = 3; +const TUint16 KEnum400 = 4; +const TUint16 KEnum500 = 5; +const TUint16 KEnum600 = 6; +const TUint16 KEnum700 = 7; +const TUint16 KEnum800 = 8; +const TUint16 KEnum900 = 9; +const TUint16 KEnumAlways = 10; +const TUint16 KEnumAuto = 11; +const TUint16 KEnumBevel = 12; +const TUint16 KEnumBlink = 13; +const TUint16 KEnumBlock = 14; +const TUint16 KEnumBold = 15; +const TUint16 KEnumBolder = 16; +const TUint16 KEnumButt = 17; +const TUint16 KEnumCdata = 18; +const TUint16 KEnumCm = 19; +const TUint16 KEnumCompact = 20; +const TUint16 KEnumCondensed = 21; +const TUint16 KEnumCss = 22; +const TUint16 KEnumDasharray = 23; +const TUint16 KEnumDisable = 24; +const TUint16 KEnumDiscrete = 25; +const TUint16 KEnumEnd = 26; +const TUint16 KEnumEvenodd = 27; +const TUint16 KEnumExpanded = 28; +const TUint16 KEnumExtraCondensed = 29; +const TUint16 KEnumExtraExpanded = 30; +const TUint16 KEnumFreeze = 31; +const TUint16 KEnumHidden = 32; +const TUint16 KEnumIn = 33; +const TUint16 KEnumInherit = 34; +const TUint16 KEnumInline = 35; +const TUint16 KEnumInlineTable = 36; +const TUint16 KEnumInterger = 37; +const TUint16 KEnumItalic = 38; +const TUint16 KEnumLenght = 39; +const TUint16 KEnumLighter = 40; +const TUint16 KEnumLinear = 41; +const TUint16 KEnumLineThrough = 42; +const TUint16 KEnumListItem = 43; +const TUint16 KEnumMagnify = 44; +const TUint16 KEnumMarker = 45; +const TUint16 KEnumMiddle = 46; +const TUint16 KEnumMiter = 47; +const TUint16 KEnumMm = 48; +const TUint16 KEnumNarrower = 49; +const TUint16 KEnumNever = 50; +const TUint16 KEnumNone = 51; +const TUint16 KEnumNonzero = 52; +const TUint16 KEnumNormal = 53; +const TUint16 KEnumOblique = 54; +const TUint16 KEnumOverline = 55; +const TUint16 KEnumPaced = 56; +const TUint16 KEnumPc = 57; +const TUint16 KEnumPt = 58; +const TUint16 KEnumPx = 59; +const TUint16 KEnumRemove = 60; +const TUint16 KEnumReplace = 61; +const TUint16 KEnumRotate = 62; +const TUint16 KEnumRound = 63; +const TUint16 KEnumRunIn = 64; +const TUint16 KEnumScale = 65; +const TUint16 KEnumSemiCondensed = 66; +const TUint16 KEnumSemiExpanded = 67; +const TUint16 KEnumSkewX = 68; +const TUint16 KEnumSkewY = 69; +const TUint16 KEnumSpline = 70; +const TUint16 KEnumSquare = 71; +const TUint16 KEnumStart = 72; +const TUint16 KEnumSum = 73; +const TUint16 KEnumTable = 74; +const TUint16 KEnumTableCaption = 75; +const TUint16 KEnumTableCell = 76; +const TUint16 KEnumTableColumn = 77; +const TUint16 KEnumTableColumnGroup = 78; +const TUint16 KEnumTableFooterGroup = 79; +const TUint16 KEnumTableHeaderGroup = 80; +const TUint16 KEnumTableRow = 81; +const TUint16 KEnumTableRowGroup = 82; +const TUint16 KEnumTranslate = 83; +const TUint16 KEnumUltraCondensed = 84; +const TUint16 KEnumUltraExpanded = 85; +const TUint16 KEnumUnderline = 86; +const TUint16 KEnumVisible = 87; +const TUint16 KEnumWhenNotActive = 88; +const TUint16 KEnumWider = 89; +const TUint16 KEnumXMaxYMax = 90; +const TUint16 KEnumXMaxYMid = 91; +const TUint16 KEnumXMaxYMin = 92; +const TUint16 KEnumXMidYMax = 93; +const TUint16 KEnumXMidYMid = 94; +const TUint16 KEnumXMidYMin = 95; +const TUint16 KEnumXMinYMax = 96; +const TUint16 KEnumXMinYMid = 97; +const TUint16 KEnumXMinYMin = 98; +const TUint16 KEnumXml = 99; + + +#define KCSS_ATTR_FILL 0 +#define KCSS_ATTR_STROKE 1 +#define KCSS_ATTR_STROKEWIDTH 2 +#define KCSS_ATTR_VISIBILITY 3 +#define KCSS_ATTR_FONTFAMILY 4 +#define KCSS_ATTR_FONTSIZE 5 +#define KCSS_ATTR_FONTSTYLE 6 +#define KCSS_ATTR_FONTWEIGHT 7 +#define KCSS_ATTR_STROKE_DASHARRAY 8 +#define KCSS_ATTR_DISPLAY 9 +#define KCSS_ATTR_FILLRULE 10 +#define KCSS_ATTR_STROKE_LINECAP 11 +#define KCSS_ATTR_STROKE_LINEJOIN 12 +#define KCSS_ATTR_STROKE_DASHOFFSET 13 +#define KCSS_ATTR_STROKE_MITERLIMIT 14 +#define KCSS_ATTR_COLOR 15 +#define KCSS_ATTR_TEXTANCHOR 16 +#define KCSS_ATTR_TEXTDECORATION 17 +#define KCSS_ATTR_COLORINTERPOLATION 18 +#define KCSS_ATTR_COLORRENDERING 19 +#define KCSS_ATTR_LETTERSPACING 20 +#define KCSS_ATTR_WORDSPACING 21 + +#define KCSS_ATTR_FILL_OPACITY 22 +#define KCSS_ATTR_STROKE_OPACITY 23 +#define KCSS_ATTR_FONT 24 +/***************************************************/ +/***************************************************/ +const TInt KSvgTypeTransform = 30; +const TInt KSvgTypeTranslate = 31; +const TInt KSvgTypeRotate = 32; +const TInt KSvgTypeScale = 33; +const TInt KSvgTypeSkewX = 34; +const TInt KSvgTypeSkewY = 35; +const TInt KSvgType2DMatrix = 36; + +/////////////EVENT MASKS//////////////////// +const TUint8 KSvgEventMaskNone = 0x0; +const TUint8 KSvgEventMaskExternalUI = 0x1; +const TUint8 KSvgEventMaskTimer = 0x2; +const TUint8 KSvgEventMaskInternal = 0x4; +const TUint8 KSvgEventMaskExternalSystem = 0x8; +////////////////////////////////////////////////// taken from event.h + + + + +////////////////////////////////////////////////// taken from event.h +// these are taken from gfxgeneralPath.h +const TUint32 KSvgSegMoveTo = 2; +const TUint32 KSvgSegLineTo = 4; +const TUint32 KSvgSegQuadTo = 10; +const TUint32 KSvgSegCubicTo = 12; +const TUint32 KSvgSegClose = 0; +const TUint32 KSvgHorizontal = 5; +const TUint32 KSvgVertical = 6; +///////////////////////////////////////////////////// + +class MJavaError + { + public: + /** + * Dtor + * @since 1.0 + */ + virtual ~MJavaError() + { + } + + /** + * Determine wether an error is indicated by this object. + * + * @since 1.0 + * @return : ETrue, if ErrorCode() != ESvgNoError + */ + virtual TBool HasError() const = 0; + + /** + * Determine wether an error is only a warning. + * This should be a state when the svg may be display, despite + * a conflict. + * + * @since 1.0 + * @return ETrue if HasError() is only a warning. + */ + virtual TBool IsWarning() const = 0; + + /** + * Get the error code contained by this object. + * + * @since 1.0 + * @return : the TSvgErrorCode value + */ + virtual TInt ErrorCode() const = 0; + + /** + * Get the error description string for this object. + * + * @since 1.0 + * @return : error description string. + */ + virtual TDesC8& Description() = 0; + }; + + +/** + * This class implements the interface for a MJavaError object, which contains + * an error code and a description of the error if one exists. + * + * @since 1.0 + */ +class CJavaError : public CBase, public MJavaError + { + public: + + /** + * Two-phase constructor. + * Creates an integer 'handle' from C++ object for referencing them inside Java. + * The shift garauntees a positive integer. + * Unhanding the integer requires the destination type to be known and bit shifting. + * + * @since 1.0 + * @return : CJavaError object + */ + static TInt NewL( CSvgErrorImpl& aError ); + + /** + * Destructor + */ + virtual ~CJavaError(); + + /** + * Determine wether an error is indicated by this object. + * + * @since 1.0 + * @return : ETrue, if ErrorCode() != ESvgNoError + */ + virtual TBool HasError() const; + + /** + * Determine wether an error is only a warning. + * This should be a state when the svg may be display, despite + * a conflict. + * + * @since 1.0 + * @return ETrue if HasError() is only a warning. + */ + virtual TBool IsWarning() const; + + /** + * Get the error code contained by this object. + * + * @since 1.0 + * @return : the TSvgErrorCode value + */ + virtual TInt ErrorCode() const; + + /** + * Get the error description string for this object. + * + * @since 1.0 + * @return : error description string. + */ + virtual TDesC8& Description(); + + protected: + /** + * Second phase of constructor + * + * @since 1.0 + */ + void ConstructL( CSvgErrorImpl& aError ); + + /** + * Ctor. + * + * @since 1.0 + */ + CJavaError(); + + private: + TInt iErrorCode; + TBool iIsWarning; + HBufC8* iDescription; + }; + +// *********************************************************************** +// SVG Engine +// *********************************************************************** +/** + * The SVG Engine is fundamental object for 2D rendering. The rendering can + * only be achieved through the render method provided by the SVG Engine object. + * NOTE: Java MIDlet can uses multiple SVG Engine objects. + * NOTE: Java side cannot provide the SVG Engine object for: + *
    + *
  • the SVG Document operations
  • + *
  • the SVG Element operations
  • + *
+ */ + +// ***************************************************************************** +// SVG Rendering Surface Functions +// ***************************************************************************** +/** + * The SVG Rendering Surface functions are not used in java side. + * + +// *********************************************************************** +// SVG Document +// *********************************************************************** +/** + * The SVG Document represents an XML Document. + *

The SVG Document is a subset of the Document interface defined + * in the + * DOM Level 3 Core.

+ */ + +// *********************************************************************** +// SVG Element +// *********************************************************************** +/** + * Description of an SVG element in the document tree. Element's id can be set only + * if it does not already have an id. Elements with non-null id can be inserted, but + * cannot be removed from the DOM tree. + * + *

+ * An SVG element's "traits" value can be read and manipulated. Each trait + * corresponds to an attribute or property,which is parsed and understood by the element + * and in most cases animatable. Unlike attributes, each element has a + * well-defined set of traits and attempting to access undefined trait is an error. Also unlike + * attributes traits are typed and their values are normalized; for instance SVG path specification + * is parsed and all path commands are converted to their absolute variants, it is not possible to + * say through the value of the trait if a path command was absolute or relative. When getting and + * setting trait values, accessor of the correct type must be used or exception will be thrown. + *

+ *

+ * Initial trait values come from parsing corresponding attributes. If value is not specified, but + * corresponing attribute (or property for environments where styling is supported) is inherited, + * inherited value is returned as a result of the trait query method. If it is not inherited, default + * value is returned. Default values are also returned in the case when there is no parent to inherit + * from, for ex: when you create a new element, set a trait value to 'inherit', but there is no parent for + * inheritance. It is important to note that the value which is returned is always a base value (i.e. before animation + * is applied), and this is true for both static and animated content. + *

+ *

+ * Setting a trait value has the same effect as changing a corresponding attribute, but trait + * setters can operate on typed values. The value which is modified is always a base value. + * For inheritable traits the trait value can always be set to "inherit" + * (but querying the value will always return the actual inherited value as explained above). + *

+ * + *

Traits supported in this specification, SVG Tiny 1.1 DOM

+ * + *

The table below shows the list of attributes and properties that SVG Tiny + * DOM 1.1 implementations must support. Each light gray section lists one or + * multiple elements for which the subsequent attributes or properties + * apply. Each attribute row lists the allowed getter and setter (s). The last + * column specifies the default values that must be used for each attribute or + * property.

+ *

Note: For 'REQUIRED' attributes, there are two cases: + * + *

    + *
  • i) The document is in error, if this attribute was not present at the time of loading.
  • + *
  • ii) When using uDOM API, the specified default value (in parenthesis) must be used.
  • + *
+ *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Property
+ *
Trait Getter
[possible return value(s)]
+ *
Trait Setter
[allowed value(s)]
+ *
Default Values
+ *

+ *

+ *

+ *

+ *
<svg>, + * <rect>, <circle>, <ellipse>, <line>, + * <path>, <g>, <image>, <text>, <a>, and <use>
color
+ *
getRGBColorTrait [SVGRGBColor]
+ *
setTrait [inherit]
setRGBColorTrait [SVGRGBColor]
+ *
rgb(0,0,0)
+ *
display
+ *
getTrait [inline | none ]
+ *
setTrait [inline | none | inherit ] "inline"
+ *
fill
+ *
getRGBColorTrait [null, SVGRGBColor]
+ *
setRGBColorTrait [SVGRGBColor]
setTrait(none | currentColor | inherit)
+ *
rgb(0,0,0)
+ *
fill-rule
+ *
getTrait [nonzero | evenodd]
+ *
setTrait [nonzero | evenodd | inherit] "nonzero"
+ *
strokegetRGBColorTrait [null, SVGRGBColor]setRGBColorTrait [SVGRGBColor]
setTrait [none | currentColor | inherit]
"none"
+ *
stroke-dashoffsetgetFloatTrait setTrait [inherit]
setFloatTrait
0.0f
+ *
stroke-linecapgetTrait [butt | round | square]setTrait [butt | round | square | inherit]"butt"
+ *
stroke-linejoingetTrait [miter | round | bevel ]setTrait [miter | round | bevel | inherit]"miter"
+ *
stroke-miterlimitgetFloatTrait [ value >= 1]setTrait [inherit]
setFloatTrait [value >= 1]
4.0f
+ *
stroke-widthgetFloatTrait [value >= 0]setTrait [inherit]
setFloatTrait [value >= 0]
1.0f
+ *
visibilitygetTrait [visible | hidden]setTrait [visible | hidden | inherit]"visible"
+ *

+ *

+ *

+ *

+ *
<svg>, <text>, <g>, <a>, and <use>;
+ *
font-family
+ *
getTrait [single, computed font-family value]
+ *
setTrait [same syntax as font-family attribute]
+ *
User-Agent
+ *
font-size
+ *
getFloatTrait  [value >= 0]
+ *
setFloatTrait [value >= 0]
setTrait [inherit]
+ *
User-Agent
+ *
font-style
+ *
getTrait [normal | italic | oblique ] setTrait [normal | italic | oblique | inherit] "normal"
+ *
font-weight
+ *
getTrait [100 | 200 | 300
| 400 | 500 | 600 | 700 | 800 | 900 ]
setTrait [normal | bold | bolder | lighter | 100 | 200 | 300
+ * | 400 | 500 | 600 | 700 | 800 | 900 | inherit]
"normal"
+ *
text-anchor
+ *
getTrait [start | middle | end]
+ *
setTrait [start | middle | end | inherit ]
+ *
"start"
+ *

+ *
Attribute
+ *
Trait Getter
+ *
Trait Setter
+ *
Default Values
+ *

+ *

+ *

+ *

+ *
+ * <rect>, <circle>, <ellipse>, <line>, <path>, <g>, + * <image>, <text>, <a>, and <use>
transform
+ *
getMatrixTrait [SVGMatrix]
+ *
setMatrixTrait [SVGMatrix]
+ *
Identity matrix
+ * (1,0,0,1,0,0)
+ *

+ *

+ *

+ *

+ *
<rect>
+ *
height
+ *
getFloatTrait [ value >= 0]
+ *
setFloatTrait [ value >= 0]
+ *
REQUIRED
(0.0f)
+ *
width
+ *
getFloatTrait [ value >= 0]setFloatTrait [ value >= 0]REQUIRED
(0.0f)
+ *
x
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
rx
+ *
getFloatTrait [value >= 0]setFloatTrait [value >= 0]0.0f
+ *
ry
+ *
getFloatTrait [value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
0.0f
+ *

+ *

+ *

+ *

+ *
<circle>
+ *
cx
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
cy
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
r
+ *
getFloatTrait [ value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
REQUIRED
(0.0f)
+ *

+ *

+ *

+ *

+ *
<ellipse>
+ *
cx
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
cy
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
rx
+ *
getFloatTrait [value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
REQUIRED
(0.0f)
+ *
ry
+ *
getFloatTrait [value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
REQUIRED
(0.0f)
+ *

+ *

+ *

+ *

+ *
<line>
+ *
x1
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
x2
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y1
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y2
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *

+ *

+ *

+ *

+ *
<path> (path-length is not supported)
+ *
d
+ *
getPathTrait [SVGPath]
+ *
setPathTrait [SVGPath]
+ *
REQUIRED
(Empty SVGPath)
+ *

+ *

+ *

+ *

+ *
<image>
+ *
x
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
width
+ *
getFloatTrait [value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
REQUIRED
(0.0f)
+ *
height
+ *
getFloatTrait [value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
REQUIRED
(0.0f)
+ *
xlink:href
+ *
getTrait NS[absolute URI]
+ *
setTraitNS [non local-URI value]
+ *
REQUIRED
( "" )
+ *

+ *

+ *

+ *

+ *
<use>
+ *
x
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
xlink:href
+ *
getTraitNS[absolute URI]
+ *
setTraitNS
+ *
""
+ *

+ *

+ *

+ *

+ *
<a>
+ *
target
+ *
getTrait
+ *
setTrait
+ *
""
+ *
xlink:href
+ *
getTraitNS[absolute URI]
+ *
setTraitNS
+ *
""
+ *

+ *

+ *

+ *

+ *
<text>
(Notes: + * For 'x' and 'y', it is only possible + * to provide floating point scalar values; an array of x or y values is not supported.
+ * 'rotate' attribute is not supported.)
+ *
x
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
#text
+ *
getTrait [not null]
+ *
setTrait [not null]
+ *
""
+ *

+ *

+ *

+ *

+ *
<svg>
+ *
version
+ *
getTrait
+ *
Not available (readonly)
+ *
"1.1"
+ *
baseProfile
+ *
getTrait
+ *
Not available (readonly)
+ *
"tiny"
+ *
viewBox
+ *
getRectTrait [null, SVGRect]
+ *
setRectTrait [SVGRect]
+ *
null
+ *
zoomAndPan
+ *
getTrait [disable | magnify]
+ *
setTrait [disable | magnify]
+ *
"magnify"
+ *

+ *

+ *

+ *

+ *
+ */ + +// *********************************************************************** +// SVG Path +// *********************************************************************** +/** + * An SVG Path datatype is used to define the path geometry. + * Corresponds to SVG path specification or the "d" attribute. + * + *

The native implementations must support the following simplifications or + * canonicalization of path segments. Any simplifications should be lossless. + * + *

    + *
  • Relative commands (c, h, l, m, q, s, t, and v) must be converted to their absolute + * counterparts·
  • + *
  • Horizontal and Vertical lines (H, h, V, and v) must be converted to general + * lines (L and l)·
  • + *
  • Translate command S to command C·
  • + *
  • Translate command T to command Q.
  • + *
+ *

+ */ + +/** + * The CSvgJavaInterfaceImpl class specializes the CSvgEngineInterfaceImpl class + */ +class CSvgJavaInterfaceImpl : public CSvgEngineInterfaceImpl, public MSvgMouseListener +{ +public: + /** + * Construct an instance of CSvgJavaInterfaceImpl + */ + IMPORT_C static CSvgJavaInterfaceImpl* NewL( TFontSpec& aFontSpec ); + IMPORT_C static CSvgJavaInterfaceImpl* NewL(); + + /** + * Destruct an instance of CSvgJavaInterfaceImpl + */ + IMPORT_C ~CSvgJavaInterfaceImpl(); + + // *********************************************************************** + // SVG Engine + // *********************************************************************** + /** + * Create an SvgEngine instance. + * NOTE: Java side uses engine only during rendering phase. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableGraphics#render() + * @return Pointer to CSvgEngineImpl object if creation is succesful, otherwise 0 is returned. + */ + IMPORT_C SvgEngineHandle SvgEngineCreate(); + + /** + * Request to set render quality. + * Set the quality of rendering. It can take one of the values, + * RENDERING_QUALITY_LOW (=1) or RENDERING_QUALITY_HIGH (=2). + * Default value is RENDERING_QUALITY_HIGH. + * The implementation of these quality levels is implementation dependent and should + * be mapped to definitions in SVG spec (shape, text, image and color rendering) + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableGraphics#setRenderingQuality() + * @param aEngineHandle Engine handle. + * @param aQuality This value indicates the quality of rendering required. + */ + IMPORT_C void SvgEngineSetRenderQuality( SvgEngineHandle aEngineHandle, TInt aQuality ); + + /** + * Request to render the SVG document. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableGraphics#render() + * @param aEngineHandle Svg engine handle + * @param aDocumentHandle Svg document handle + * @param aSurfaceHandle Svg surface handle + * @param aSurfaceMaskHandle Mask that defines what pixels should be thrown and what not. + * @param aCurrentTime Current frame time. NOTE might be obsolete since the + */ + IMPORT_C void SvgEngineRenderDocument( + SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, + TInt aSurfaceHandle, TInt aSurfaceMaskHandle = NULL, TReal32 aCurrentTime = 0.0f ) __SOFTFP; + + IMPORT_C void SvgEngineRenderDocumentL( + SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, + TInt aSurfaceHandle, const TPoint& aAnchor, const TRect& aRenderArea, TReal32 aCurrentTime, TReal32 aAlpha ) __SOFTFP; + + /** + * Request to destroy the given engine by handle. + * NOTE: Java MIDlet could use multiple engines. + * + * @since 1.0 + * @param aEngineHandle Engine + */ + IMPORT_C void SvgEngineDestroy( SvgEngineHandle aEngineHandle ); + + /* + * Sets the animation back to time 0 and then starts the internal engine timer + * NOTE: Java doesn't use this method. Java uses own timer(s). + * + * @since 1.0 + * @param aEngineHandle Engine + */ + IMPORT_C void SvgEngineStart( SvgEngineHandle aEngineHandle ); + + /* + * Stops the internal SVG engine timer + * NOTE: Java doesn't use this method. Java uses own timer. + * + * @since 1.0 + * @param aEngineHandle Engine + */ + IMPORT_C void SvgEngineStop( SvgEngineHandle aEngineHandle ); + + /* + * Resumes the internal SVG engine timer + * NOTE: Java doesn't use this method. Java uses own timer. + * + * @since 1.0 + * @param aEngineHandle Engine + */ + IMPORT_C void SvgEngineResume( SvgEngineHandle aEngineHandle ); + + // ***************************************************************************** + // SVG Rendering Surface Functions + // ***************************************************************************** + /** + * Create a Svg Rendering Surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aWidth Width + * @param aHeight Height + * @return Surface + */ + IMPORT_C SvgSurfaceHandle SvgRenderingSurfaceCreate( TInt aWidth, TInt aHeight ); + + /** + * Destroy a Svg Rendering Surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aSurface Surface + */ + IMPORT_C void SvgRenderingSurfaceDestroy( SvgSurfaceHandle aSurface ); + + /** + * Get a pointer to the Svg Rendering surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aSurface Surface + * @return CFbsBitmap object + */ + IMPORT_C TUint* SvgRenderingSurfaceGetBuffer( SvgSurfaceHandle aSurface ); + + /** + * Get the width of the Svg Rendering Surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aSurface Surface + * @return Width + */ + IMPORT_C TInt SvgRenderingSurfaceGetWidth( SvgSurfaceHandle aSurface ); + /** + * Get the height of the Svg Rendering Surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aSurface Surface + * @return Height + */ + IMPORT_C TInt SvgRenderingSurfaceGetHeight( SvgSurfaceHandle aSurface ); + + /** + * Clear the Svg Rendering Surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aSurface Surface + */ + IMPORT_C void SvgRenderingSurfaceClearBuffer( SvgSurfaceHandle aSurface ); + + // *********************************************************************** + // SVG Document + // *********************************************************************** + /** + * Create an empty svg document. + * NOTE: Java doesn't use this method. + * Java side uses the SvgDocumentCreateL method to create an empty SVG document + * that contains a root <svg> element with default viewport size of 100x100. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#createEmptyImage() + * @return Svg Document. + */ + IMPORT_C SvgDocumentHandle SvgDocumentCreateEmpty(); + + /** + * Create a svg document by parsing the given string. + * The image size is determined by the content specification + * (eg: width/height attributes on root SVG element). The default viewport size + * of 100-by-100 pixels is used when the size is unspecified. This method will throw an exception + * when the document is in error: + *
    + *
  • the SVG document does not conform to the XML 1.0 specification
  • + *
  • an element has an attribute or property value which is not permissible according to the SVG specification
  • + *
  • the required or mandatory attributes according to the SVG specification are missing
  • + *
  • the document contains circular references on the <use> element
  • + *
  • the document contains <image> element(s) with local references
  • + *
  • the document contains elements with duplicate Id's
  • + *
  • the document contains animation(s) in error
  • + *
+ * + * The native engine might be invoked for any external resource referenced in the document + * by calling the SvgDocumentRequestCompleted. + * However, please note that data URIs (for ex: base64 encoded images + * like <image xlink:href="data:image/png;base64,/9j/4AAQ..."/>) + * are required to be decoded by the native engine. + * The engine must only make one call if there exist multiple resources with the same URI. + * + * If a svg document contains external resources and SvgDocumentRequestCompleted is not called + * then the engine's default implementation is used automatically, but it might not be able to load all of + * external resources. For example, if the svg document is loaded from a file in a Jar file, + * the implementation will not be able to load images that have relative + * URIs (ex; <image xlink:href="myImage.png" />). + * + *

Note that SvgDocumentRequestCompleted is also called when the xlink:href attribute on + * <image> is set or changed by the application, but the call is made only when the + * element is hooked into the document tree i.e. when the ancestors go all the way up to + * the root <svg> element. There are two cases: + *

    + *
  • When changing the xlink:href attribute of an existing <image> element that is already hooked or part of the tree.
  • + *
  • When creating a new <image>, setting its xlink:href and hooking it to the document tree.
  • + *
+ *

+ * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#createImage() + * @param aString The string from which the SVG content should be read + * @return Svg Document if successful, otherwise the function leaves. + * @throws MJavaError if an error occurs while loading the content. + */ + IMPORT_C SvgDocumentHandle SvgDocumentCreateL( const TPtrC16& aString ); + + /** + * Destroy the given svg document (by handle). + * NOTE: Java MIDlet could use multiple documents. + * + * @since 1.0 + * @param aDocumentHandle Document handle. + */ + IMPORT_C void SvgDocumentDestroy( SvgDocumentHandle aDocumentHandle ); + + /** + * Svg Document request complete. + * Once the requested external resource is available, the application forwards this information + * (data) to the SVG engine. If this method is called a second time for a same URL (uri) of a + * same SVG document, the engine will replace the current resource data with the new + * one. Note: Setting NULL for data (0 for data_size) indicates + * that the requested resource could not be fetched by java side, and in this event the SVG engine + * will not make further attempts to load this resource. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#requestCompleted() + * @param hDocument SVG document handle + * @param uri External resource URI + * @param data External resource data + * @param data_size External resource data size + * @return TODO + */ + EXPORT_C TInt SvgDocumentRequestCompleted( SvgDocumentHandle hDocument, const TPtrC16& aUri, const TPtrC8& ); + + /** + * Get an external item indicated in a SVG document. + * Java side might request an external resouce and once the requested external resource is available, + * java side forwards this information (SvgDocumentGetExternalListItem) to the SVG engine. + * Note: Returning null indicates that the SVG engine tryes to handle the requested resource. + * + * @since 1.0 + * @param aDocumentHandle SVG document handle + * @param index External resource item index. Scale: + *
  • 0 <= index < SvgDocumentGetExternalListSize
  • + * @return External resource URI + */ + IMPORT_C TInt SvgDocumentGetExternalListItem(SvgDocumentHandle aDocumentHandle, TInt aIndex, TPtrC16& aItem); + + /** + * Get number of external list items in a SVG document. + * After the SVG document is created (see SvgDocumentCreateL) java side checks if + * the SVG document contains external item(s) + * + * @since 1.0 + * @param aDocumentHandle SVG document handle + * @return Number of external resource items + */ + IMPORT_C TInt SvgDocumentGetExternalListSize( SvgDocumentHandle aDocumentHandle ); + + /** + * Increments the animation or media timeline for the specified document aDocumentHandle + * (in seconds). + * This method is intended to move only forward in the timeline. + * It is important to note that setting large increments of time would result in + * skipping parts of the animation as per the SVG animation model. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#incrementTime() + * @see org.w3c.dom.svg.SVGSVGElement#setCurrentTime() + * @param aDocumentHandle SVG document handle. + * @param seconds the value of time to be set in seconds. + */ + IMPORT_C void SvgDocumentSetMediaTime( SvgDocumentHandle aDocumentHandle, TReal32 seconds ) __SOFTFP; + + /** + * Get current animation or media timeline time for the specified document. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGSVGElement#getCurrentTime() + * @param aDocumentHandle SVG document handle + * @return Returns current animation timeline time in seconds + */ + IMPORT_C TReal32 SvgDocumentGetMediaTime( SvgDocumentHandle aDocumentHandle ) __SOFTFP; + + /** + * Get the viewport width of the given SVG document. + * The value returned is always in pixels. If the specified width is defined in percentages, the + * values are mapped to the default view port size of 100x100. If the viewport width + * is explicitly changed by the java application, then the percentages are ignored and the content + * is made to fit to this new viewport width. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#getViewportWidth() + * @see SvgDocumentSetViewportWidth + * @param aDocumentHandle SVG document handle + * @return the current width of the given SVG document. + */ + IMPORT_C TInt SvgDocumentGetViewportWidth( SvgDocumentHandle aDocumentHandle ); + + /** + * Get the viewport height of the given SVG document. + * The value returned is always in pixels. If the specified height is defined in percentages, the + * values are mapped to the default view port size of 100x100. If the viewport height + * is explicitly changed by the java application, then the percentages are ignored and the content + * is made to fit to this new viewport height. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#getViewportHeight() + * @see SvgDocumentSetViewportHeight + * @param aDocumentHandle SVG document handle + * @return the current height of the given SVG document. + */ + IMPORT_C TInt SvgDocumentGetViewportHeight( SvgDocumentHandle aDocumentHandle ); + + /** + * Set the new (viewport) width for the given SVG document. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#setViewportWidth() + * @see SvgDocumentGetViewportWidth + * @param aDocumentHandle SVG document handle + * @param aWidth The new width to be set. + */ + IMPORT_C void SvgDocumentSetViewportWidth( SvgDocumentHandle aDocumentHandle, TInt aWidth ); + + /** + * Set the new (viewport) height for the given SVG document. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#setViewportHeight() + * @see SvgDocumentGetViewportHeight + * @param aDocumentHandle SVG document handle + * @param aHeight The new height to be set. + */ + IMPORT_C void SvgDocumentSetViewportHeight( SvgDocumentHandle aDocumentHandle, TInt aHeight ); + + /** + * Set the default viewport size for the given SVG document. + * The default viewport size of 100-by-100 pixels is used when the size is unspecified. + * + * @since 1.0 + * @param aDocumentHandle Document + */ + IMPORT_C void SvgDocumentViewportInit( SvgDocumentHandle aDocumentHandle ); + + /** + * Get the viewport width units for the given document. + * NOTE: Java side is not actually need this method. + * + * @since 1.0 + * @param aDocumentHandle Document + * @return 1 if pixels or 0 if percentages + */ + IMPORT_C TInt SvgDocumentGetViewportWidthUnits( SvgDocumentHandle aDocumentHandle ); + + /** + * Get the viewport height units for the given document. + * NOTE: Java side is not actually need this method. + * + * @since 1.0 + * @param aDocumentHandle Document + * @return 1 if pixels or 0 if percentages + */ + IMPORT_C TInt SvgDocumentGetViewportHeightUnits( SvgDocumentHandle aDocumentHandle ); + + /** + * Return a child element of the given SVG document Node which corresponds to the top-most + * tag in XML file. For SVG files it must be SVGSVGElement. + * + * @since 1.0 + * @see org.w3c.dom.Document#getDocumentElement() + * @param aDocumentHandle SVG document handle + * @return The root element associated with the given SVG document. + */ + IMPORT_C SvgElementHandle SvgDocumentGetRootElement( SvgDocumentHandle aDocumentHandle ); + + /** + * Get the svg element in the given SVG document with + * the given unique ID string.If no such element exists, this returns NULL. + * + * @since 1.0 + * @see org.w3c.dom.Document#getElementById() + * @param aDocumentHandle SVG document handle + * @param aId the ID of the element to be retrieved. + * @return An element handle that matches with the given ID or + * NULL if the ID is not present. + */ + IMPORT_C SvgElementHandle SvgDocumentGetElementById( SvgDocumentHandle aDocumentHandle, const TPtrC16& aID ); + + /** + * Get the number of ids in the current SVG document. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aDocumentHandle SVG document handle + */ + IMPORT_C TInt SvgDocumentGetNumberOfIds(SvgDocumentHandle aDocumentHandle ); + + /** + * Get an id (at index) from the current SVG document. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aDocumentHandle SVG document handle + * @param index ID index + * @return ID string + */ + IMPORT_C TInt SvgDocumentGetId(SvgDocumentHandle aDocumentHandle, TInt index, TPtrC16& aId); + + /** + * Set the begin animation time for the given element in the given SVG document. + * The new time is added to the + * begin instance times list. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGAnimationElement#beginElementAt() + * @param aDocumentHandle SVG document handle + * @param aElementHandle Element handle + * @param aOffsetTime The time in seconds at which to begin the element. + */ + IMPORT_C void SvgDocumentBeginElementAt( SvgDocumentHandle aDocumentHandle, + SvgElementHandle aElementHandle, + TReal32 aOffsetTime ) __SOFTFP; + + /** + * Set the end animation time for the given element in the given SVG document. + * The new time is added to the + * end instance times list. + * NOTE: Native engine checks the element is active before set the new end time. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGAnimationElement#endElementAt() + * @param aDocumentHandle SVG document handle + * @param aElementHandle Element handle + * @param aOffsetTime The time in seconds at which to end the element. + */ + IMPORT_C void SvgDocumentEndElementAt( SvgDocumentHandle aDocumentHandle, + SvgElementHandle aElementHandle, + TReal32 aOffsetTime ) __SOFTFP; + + /** + * Set the given element to have the focus in the given SVG document. + * The initial focus is always null and setting + * NULL will remove the current focus. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#focusOn() + * @param aDocumentHandle SVG document handle + * @param aElementHandle The element to set the focus on. + + * changes made for Focus-in/focus-out bug(AMIA-6T8EEG) + */ + IMPORT_C void SvgDocumentFocusOn( SvgDocumentHandle aDocumentHandle, + SvgElementHandle aElementHandle ); + + /** + * Get the element having the focus. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#focusOn() + * @param aDocumentHandle SVG document handle + * @return The element focused. + */ + IMPORT_C SvgElementHandle SvgDocumentGetFocus( SvgDocumentHandle aDocumentHandle ); + + /** + * Activate the element that has the focus. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#activate() + * @param aDocumentHandle SVG document handle + */ + IMPORT_C void SvgDocumentActivate( SvgDocumentHandle aDocumentHandle ); + + /** + * Request a mouse event at the given coordinate. + * This method is used to dispatch a mouse "click" event to the given + * document. The mouse position is given as screen coordinates aMouseX, aMouseY. + * If the aMouseX, aMouseY values are outside the viewport area or no target is available + * for the aMouseX, aMouseY coordinates, the event is not dispatched. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#dispatchMouseEvent() + * @param aDocumentHandle SVG document handle + * @param aMouseX The x location of the mouse/pointer in viewport coordinate system. + * @param aMouseX The y location of the mouse/pointer in viewport coordinate system. + * @return Element handle to where mouse was clicked. Return null if no hit. + */ + IMPORT_C SvgElementHandle SvgDocumentDispatchMouseEvent( SvgDocumentHandle aDocumentHandle, + TInt aMouseX, TInt aMouseY ); + + /** + * Check if document has animation. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aDocumentHandle SVG document handle + * @param TBool . ETrue if animation present otherwise EFalse. + */ + IMPORT_C TInt SvgDocumentHasAnimation( SvgDocumentHandle aDocumentHandle ); + + + // *********************************************************************** + // SVG Element + // *********************************************************************** + /** + * Create a new svg element based on the specified + * (aType) SVG tag name. Only the following elements must be supported: + * <rect>, <circle>, <ellipse>, <line>, + * <path> <use> <image> <text>, + * <a> and <g>. + * + * @since 1.0 + * @see org.w3c.dom.Document#createElementNS() + * @param aType + * @return handle to the newly created SVG Element. + */ + IMPORT_C SvgElementHandle SvgElementCreate( SvgAttrType aType ); + + /** + * Destroy svg element of the given handle. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param hElement Element handle + */ + IMPORT_C void SvgElementDestroy( SvgElementHandle hElement ); + + /** + * Returns a parent element of the given element. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getParentNode() + * @param aElementHandle Element handle + * @return The parent element or NULL if there is no parent + * (i.e. if a element has just been created and not yet added to the tree, + * or if it has been removed from the tree, this is null). + */ + IMPORT_C SvgElementHandle SvgElementGetParent( SvgElementHandle aElementHandle ); + + /** + * Returns the first child element node of the given element. + * Return NULL if this element has no child elements. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getFirstElementChild() + * @param aElementHandle Element handle + * @return The first child element node of the given element. + */ + IMPORT_C SvgElementHandle SvgElementGetFirstElementChild( SvgElementHandle aElementHandle ); + + /** + * Returns the next sibling element of the given element. + * Return NULL if the given element has no element sibling + * nodes that come after this one in the document tree. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getNextElementSibling() + * @param aElementHandle Element handle + * @return The next sibling element node of this element. + */ + IMPORT_C SvgElementHandle SvgElementGetNextElementSibling( SvgElementHandle aElementHandle ); + + /** + * Append the given child element to the given svg element. + * + * @since 1.0 + * @see org.w3c.dom.Node#appendChild() + * @param aElementHandle Element handle + * @param aChildElementHandle New child element handle + * @return Next sibling element + */ + IMPORT_C void SvgElementAppendChild( SvgElementHandle aElementHandle, + SvgElementHandle aChildElementHandle ); + + /** + * Remove the given child element from the given svg element. + * Elements that have ids cannot be removed from the tree. + * + * @since 1.0 + * @see org.w3c.dom.Node#removeChild() + * @param aElementHandle The parent element. + * @param aChildElementHandle The element that is to be removed + * TODO @return Handle to the removed element. Return NULL + * if operation failed. + */ + IMPORT_C SvgElementHandle SvgElementRemoveChild( SvgElementHandle aElementHandle, + SvgElementHandle aChildElementHandle ); + + /** + * Inserts aChildElementHandle before aReferenceElementHandle + * in the child list for the aElementHandle. If aReferenceElementHandle + * is NULL, aChildElementHandle is inserted at the end of the list. + * If the aChildElementHandle is already part of the tree, it is first removed. + * + * @since 1.0 + * @see org.w3c.dom.Node#insertBefore() + * @param aElementHandle The parent element. + * @param aChildElementHandle The child to add + * @param aReferenceElementHandle The child before which the new child should be added. + * @throws TODO Should throw exception if the aChildElementHandle would cause + * the SVG document to go into error, for ex: when the newChild contains a <use> + * element with an invalid xlink:href attribute. + */ + IMPORT_C void SvgElementInsertBefore( SvgElementHandle aElementHandle, + SvgElementHandle aChildElementHandle, + SvgElementHandle aReferenceElementHandle ); + + /** + * Request element type. The following element type are supported: + * <a>, <animate>, <animateColor>, <animateMotion>, + * <animateTransform> <circle> <defs> <ellipse>, + * <font>, <font-face>, <font-face-name>, <font-face-src>, + * <foreignObject>, <g>, <glyph>, <hkern>, <image>, + * <line>, <metadata>, <missing-glyph>, <metadata>, <mpath>. + * <path>, <polygon>, <polyline>, <rect>, <set>, + * <svg>, <switch>, <text>, <title>, <use>. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement + * @param aElementHandle The element. + * @return Element type. + */ + IMPORT_C TInt SvgElementGetType( SvgElementHandle aElementHandle ); + + /** + * Check if document has animation. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aElementHandle SVG element handle + * @param TBool . ETrue if animation present otherwise EFalse. + */ + IMPORT_C TInt SvgElementHasAnimation( SvgElementHandle aElementHandle ); + + /** + * Get a string attribute from the given element. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement + * @param aElementHandle The element. + * @param aAttributeName Attribute's name + * @return Attribute value. + */ + IMPORT_C TInt SvgElementGetStringAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttributeName, TPtrC16& aStrAttribute ); + + /** + * Set a string attribute in the given element. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement + * @param aElementHandle The SVG element handle. + * @param aAttributeName Attribute's name + * @param aAttributeValue Atribute's value. + */ + IMPORT_C void SvgElementSetStringAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttributeName, + const TPtrC16& aAttributeValue ); + + /** + * Get a color attribute from the given element. + * The values are copied into the color components given. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGRGBColor + * @param aElementHandle The element handle. + * @param aAttributeName Attribute's name + * @param aRedValue The red value + * @param aGreenValue The green value + * @param aBlueValue The blue value + * @return Integer containing the RGB value for the color. + */ + IMPORT_C TInt SvgElementGetColorAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute, + TInt* aRedValue, TInt* aGreenValue, TInt* aBlueValue ); + + /** + * Set a color attribute for the given element. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGRGBColor + * @param aElementHandle The element. + * @param aAttribute Attribute's name + * @param aRedValue The red value + * @param aGreenValue The green value + * @param aBlueValue The blue value + */ + IMPORT_C void SvgElementSetColorAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute, + TInt aRedValue, TInt aGreenValue, TInt aBlueValue ); + + + /** + * Return a attribute (trait) value as float. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getFloatTrait() + * @param aElementHandle The element. + * @param aAttribute Attribute's (or trait's) name + * @return The attribute (or trait) value as float for the specified name. + */ + IMPORT_C TReal32 SvgElementGetFloatAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute ) __SOFTFP; + + /** + * Set the attribute (trait) value as float. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getFloatTrait() + * @param aElementHandle The element handle. + * @param aAttribute The name of the attribute (trait) to be set. + * @param aFloatValue The value of the attribute (trait) to be set as float. + */ + IMPORT_C void SvgElementSetFloatAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute, + TReal32 aFloatValue ) __SOFTFP; + + /** + * Set enum attribute (trait) value. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement + * @param aElementHandle The element handle. + * @param aAttribute The name of the attribute (trait) to be set. + * @param aValue The value of the attribute (trait) to be set. + */ + IMPORT_C void SvgElementSetEnumAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute, short aValue ); + + /** + * Get enum attribute (trait) value. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement + * @param aElementHandle The element handle. + * @param aAttribute The name of the attribute (trait). + * @return The value of the attribute (trait). + */ + IMPORT_C short SvgElementGetEnumAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute ); + + /** + * Return the rectangle attribute (trait) values. + * NOTE: The returned values are copies of the actual attribute (trait) values and + * will not change if the corresponding trait changes. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getRectTrait() + * @param aElementHandle The element handle. + * @param aRectAttribute The name of the attribute (trait) to retrieve. + * @param aX X coordinate. + * @param aY Y coordinate. + * @param aWidth Width. + * @param aHeight Height. + * @return -1 if failed otherwise returns positive integer. + */ + IMPORT_C TInt SvgElementGetRectAttribute( SvgElementHandle aElementHandle, + SvgAttrType aRectAttribute, + TReal32* aX, TReal32* aY, TReal32* aWidth, TReal32* aHeight ) __SOFTFP; + + /** + * Set the rectangle attribute (trait) values. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#setRectTrait() + * @param aElementHandle The element handle. + * @param aRectAttribute The name of the attribute (trait) to be set. + * @param aX X coordinate. + * @param aY Y coordinate. + * @param aWidth Width. + * @param aHeight Height. + */ + IMPORT_C void SvgElementSetRectAttribute( SvgElementHandle aElementHandle, + SvgAttrType aRectAttribute, + TReal32 aX, TReal32 aY, TReal32 aWidth, TReal32 aHeight ) __SOFTFP; + + /** + * Get the matrix attribute (trait) values. + * NOTE: The returned values are copies of the actual attribute (trait) values and + * will not change if the corresponding trait changes. + *
    +     * [aAVal aCVal aEVal]
    +     * [aBVal aDVal aFVal]
    +     * 
    + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getMatrixTrait() + * @param aElementHandle The element handle. + * @param aMatrixAttribute The name of the attribute (trait) to retrieve. + * @param aAVal The x scaling component + * @param aBVal The y shearing component + * @param aCVal The x shearing component + * @param aDVal The y scaling component + * @param aEVal The x translation component + * @param aFVal The y translation component + * @return TODO + */ + IMPORT_C TInt SvgElementGetMatrixAttribute( SvgElementHandle aElementHandle, + SvgAttrType aMatrixAttribute, + TReal32* aAVal, TReal32* aBVal, TReal32* aCVal, + TReal32* aDVal, TReal32* aEVal, TReal32* aFVal ) __SOFTFP; + + /** + * Set the matrix attribute (trait) values. + *
    +     * [aAVal aCVal aEVal]
    +     * [aBVal aDVal aFVal]
    +     * 
    + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#setMatrixTrait() + * @param aElementHandle The element handle. + * @param aMatrixAttribute The name of the attribute (trait) to be set. + * @param aAVal The x scaling component + * @param aBVal The y shearing component + * @param aCVal The x shearing component + * @param aDVal The y scaling component + * @param aEVal The x translation component + * @param aFVal The y translation component + */ + IMPORT_C void SvgElementSetMatrixAttribute( SvgElementHandle aElementHandle, + SvgAttrType aMatrixAttribute, + TReal32 aAVal, TReal32 aBVal, TReal32 aCVal, + TReal32 aDVal, TReal32 aEVal, TReal32 aFVal ) __SOFTFP; + + /** + * Get the path attribute (trait)value. + * NOTE: The returned values are copies of the actual attribute values and will not change if + * the corresponding trait changes. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getPathTrait() + * @see org.w3c.dom.svg.SVGPath + * @param aElementHandle The element handle. + * @param aPathAttribute The name of the attribute (trait) to retrieve. + * @return The handle to path object. NULL if not successed. + */ + IMPORT_C TInt SvgElementGetPathAttribute( SvgElementHandle aElementHandle, + SvgAttrType aPathAttribute ); + + /** + * Set the path attribute (trait) value. + * NOTE: Value is a copy in the trait so subsequent changes to the given + * aPathHandle have no effect on the value of the attribute (trait). + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#setPathTrait() + * @see org.w3c.dom.svg.SVGPath + * @param aElementHandle The element handle. + * @param aPathAttribute The name of the attribute (trait) to be set. + * @param aPathHandle The value of the attribute (trait) to be set as. + */ + IMPORT_C void SvgElementSetPathAttribute( SvgElementHandle aElementHandle, + SvgAttrType aPathAttribute , SvgPathHandle aPathHandle); + + /** + * Returns the tight bounding box in current user coordinate space. + * Tight bounding box is the smallest possible rectangle that includes the geometry + * of all contained graphics elements excluding stroke. + * The calculation is done in the user coordinate space of the element. When bounding box + * is calculated elements with display property (trait) set to none are ignored. + * Exact rules for the bounding box calculation are given in the + * SVG spec. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGLocatableElement#getBBox() + * @param aElementHandle The element handle. + * @param aAttributeType The name of the attribute (trait) to retrieve. + * @param aX X coordinate. + * @param aY Y coordinate. + * @param aWidth Width. + * @param aHeight Height. + */ + IMPORT_C void SvgElementGetBBox( SvgElementHandle aElementHandle, + SvgAttrType aAttributeType, + TReal32* aX, TReal32* aY, TReal32* aWidth, TReal32* aHeight ) __SOFTFP; + + /** + * Add event listener to the given element. + * Note: need to replace void* with specific class + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aElementHandle The element handle. + * @param aListener Listener + * @param aType Type + */ + IMPORT_C void SvgElementAddEventListener( SvgElementHandle aElementHandle, + TInt aListener, SvgAttrType aType ); + + /** + * Remove event listener from the given element. + * Note: need to replace void* with specific class + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aElementHandle The element handle. + * @param aListener Listener + * @param aType Type + */ + IMPORT_C void SvgElementRemoveEventListener( SvgElementHandle aElementHandle, + TInt aListener, SvgAttrType aType ); + /** + * Check if element is active. + * i.e. an animation element is active in these cases: + *
      + *
    • + * A media time is 1s. + *
      +	 *    
      +          
      +		   
      +     * 
      + *
    • + *
    • + * A media time is 2s. + *
      +	 *    
      +          
      +		   
      +     * 
      + *
    • + *
    + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGAnimationElement#endElementAt() + * @param aElementHandle The element handle. + * @return Positive integer if element is active. + */ + IMPORT_C TInt SvgElementIsActive( SvgElementHandle aElementHandle ); + + /** + * Check if the given element is removable (no id or children with ids). + * + * @since 1.0 + * @see org.w3c.dom.Node#removeChild() + * @param aElementHandle The element handle. + * @return Positive integer if element is removeable. + */ + IMPORT_C TInt SvgElementCheckRemoveable( SvgElementHandle aElementHandle ); + + // *********************************************************************** + // SVG Path + // *********************************************************************** + /** + * Creates new path object that is empty. + * This object can be used to modify value of path traits + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGSVGElement#createSVGPath() + * @see org.w3c.dom.svg.SVGPath + * @return The newly created path object handle with empty path commands. + */ + IMPORT_C SvgPathHandle SvgPathCreate(); + + /** + * Destroy the specified path path + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath + * @param aPathHandle Handle to the path to be deleted. + */ + IMPORT_C void SvgPathDestroy( SvgPathHandle aPathHandle ); + + /** + * Get the segment count of the given path. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#getNumberOfSegments() + * @param aPathHandle The path handle. + * @return Segment count + */ + IMPORT_C TInt SvgPathGetSegmentCount( SvgPathHandle aPathHandle ); + + /** + * Returns segment command by zero-based command index. + * Returns one of MOVE_TO, LINE_TO, + * CURVE_TO, QUAD_TO or CLOSE. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#getSegment() + * @param aPathHandle The path handle. + * @param aSegmentIndex The command index for the segment command to retrieve. + * @return The segment command for the specified aSegmentIndex. + */ + IMPORT_C TInt SvgPathGetSegmentType( SvgPathHandle aPathHandle, TInt aSegmentIndex ); + + /** + * Returns segment parameter by zero-based command index and zero-based parametr index. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#getSegmentParameter() + * @param aPathHandle The path handle. + * @param aSegmentIndex The command index for the segment command to retrieve. + * @param aSegmentParameterIndex The parameter index for the segment parameter to retrieve. + * @return the segment parameter for the specified aSegmentIndex and aSegmentParameterIndex. + */ + IMPORT_C TReal32 SvgPathGetSegmentParameter( SvgPathHandle aPathHandle, + TInt aSegmentIndex, + TInt aSegmentParameterIndex ) __SOFTFP; + + /** + * Appends 'M' (absolute move) segment to the path with the specified coordinates. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#moveTo() + * @param aPathHandle The path handle. + * @param aX The x-axis coordinate for the specified point. + * @param aY The y-axis coordinate for the specified point. + */ + IMPORT_C void SvgPathAddMoveTo( SvgPathHandle aPathHandle, TReal32 aX, TReal32 aY ) __SOFTFP; + + /** + * Appends 'L' (absolute line) segment to the path with the specified coordinates. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#moveTo() + * @param aPathHandle The path handle. + * @param aX The x-axis coordinate for the specified point. + * @param aY The y-axis coordinate for the specified point. + */ + IMPORT_C void SvgPathAddLineTo( SvgPathHandle aPathHandle, TReal32 aX, TReal32 aY ) __SOFTFP; + + /** + * Appends 'Q' (absolute quadratic curve) segment to the path. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#quadTo() + * @param aPathHandle The path handle. + * @param aX1 the x-axis coordinate of the first control point. + * @param aY1 the y-axis coordinate of the first control point. + * @param aX2 the x-axis coordinate of the final end point. + * @param aY2 the y-axis coordinate of the final end point. + * + */ + IMPORT_C void SvgPathAddQuadTo( SvgPathHandle aPathHandle, + TReal32 aX1, TReal32 aY1, + TReal32 aX2, TReal32 aY2 ) __SOFTFP; + + /** + * Appends 'C' (absolute cubic curve) segment to the path. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#curveTo() + * @param aPathHandle The path handle. + * @param aX1 the x-axis coordinate of the first control point. + * @param aY1 the y-axis coordinate of the first control point. + * @param aX2 the x-axis coordinate of the second end point. + * @param aY2 the y-axis coordinate of the second end point. + * @param aX3 the x-axis coordinate of the final end point. + * @param aY3 the y-axis coordinate of the final end point. + * + */ + IMPORT_C void SvgPathAddCurveTo( SvgPathHandle aPathHandle, + TReal32 aX1, TReal32 aY1, + TReal32 aX2, TReal32 aY2, + TReal32 aX3, TReal32 aY3 ) __SOFTFP; + /** + * Appends 'Z' (close path) segment to the path + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#close() + * @param aPathHandle The path handle. + */ + IMPORT_C void SvgPathAddClose( SvgPathHandle aPathHandle ); + + /** + * Update path info. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aElementHandle The element handle. + * @param aPathHandle The path handle. + */ + IMPORT_C void SvgElementUpdatePath( SvgElementHandle aElementHandle, SvgPathHandle aPathHandle ); + + /** + * Find whether the element is present in a document. + * + * @since 1.0 + * @param hDocument The SVG document handle. + * @param hElement The element handle. + * @return Positive integer if the element presents in the given SVG document. + */ + IMPORT_C TInt SvgElementElementInDOM ( TInt hDocument, TInt hElement ); + + /** + * Checks whether this element is child of a use element. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#dispatchMouseEvent() + * @param hElement The element handle. + * @return Postivive integer if the element is child of a use element. + */ + IMPORT_C TInt SvgElementIsUsed ( TInt hElement ); + + /** + * Finds the handle to the actual cloned element. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#dispatchMouseEvent() + * @param hElement aElement This is handle to the cloned element. this is child of the + * element. + * @return Element handle to the actual element, which is cloned. + */ + IMPORT_C TInt SvgElementGetUsedFromElement ( TInt hElement ); + + /** + * Gets a screen bounding box for the given element. + * Returns the tight bounding box in screen coordinate space. Tight bounding box is the smallest + * possible rectangle that includes the geometry of all contained graphics elements excluding + * stroke. The box coordinates are in the screen coordinate space, which is connected to the + * current user coordinate space by the matrix returned by SvgElementGetMatrixAttribute + * (with attribute id=<svg>). + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGLocatableElement#getScreenBBox() + * @see org.w3c.dom.svg.SVGLocatableElement#getScreenCTM() + * @param hElement The element handle. + */ + IMPORT_C void SvgElementGetScreenBBox( TInt hElement, TReal32* x,TReal32* y, TReal32* w, TReal32* h ) __SOFTFP; + + /** + * Set the focus out of the given element. + * The initial focus is always null and setting + * NULL will remove the current focus. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#focusOut() + * @param aDocumentHandle SVG document handle + * @param aElementHandle The element for which to set the focus out. + + * changes made for Focus-in/focus-out bug(AMIA-6T8EEG) + */ + IMPORT_C void CSvgJavaInterfaceImpl::SvgDocumentFocusOut( SvgDocumentHandle aDocumentHandle, + SvgElementHandle aElementHandle); + + /* + * Maps the PATH segment type from SVG to JSR. + */ + + TInt MapSegmentType(TInt aSvgSegmentType); + + /* + * LISTENER IMPLEMENTATIONS FROM THE ENGINE + */ + + TBool MouseEntered( RPointerArray& aElements, TInt aX, TInt aY ); + + TBool MouseExited( RPointerArray& aElements, TInt aX, TInt aY ); + + TBool MouseMoved( RPointerArray& aElements, TInt aX, TInt aY ); + + TBool MousePressed( RPointerArray& aElements, TInt aX, TInt aY ); + + TBool MouseReleased( RPointerArray& aElements, TInt aX, TInt aY ); + +public: + CSvgDocumentImpl* iTempDoc; + +private: + + TBool IsAnimationElemId( const TInt aElementId ); + /** + * Gets The corresponding JSR-to-SVG element id. Ids of the elements differ in the svg + * engine and the JSR-API's. + */ + TInt SvgGetElementTypeMappingJSRtoSVG( SvgAttrType aType ); + /** + * Gets The corresponding SVG-to-JSR element id. Ids of the elements differ in the svg + * engine and the JSR-API's. + */ + SvgAttrType SvgGetElementTypeMappingSVGtoJSR( const TInt aElementId); + + /** + * Gets the attribute type mapping from SVG to JSR. Attribute t + * + */ + SvgAttrType SvgGetAttributeTypeMappingSVGtoJSR( const TInt aElementId); + /** + * Gets the attribute type mapping from JSR to SVG. Attribute t + * + */ + TInt SvgGetAttributeTypeMappingJSRtoSVG( SvgAttrType aType ); + /** + * Gets the Enumeration value mapping from JSR to SVG. Attribute t + * + */ + TInt SvgEnumerationMappingJSRtoSVG(const TInt aAttributeId, TInt aJsrEnumValue); + /** + * Gets the Enumeration value to string mapping from JSR to SVG. Attribute t + * + */ + TInt SvgEnumerationtoStringMappingJSRtoSVG(const TInt aAttributeId, short aJsrEnumValue, TDes& aValue); + /** + * Gets the string to enumeration value mapping from SVG to JSR. Attribute t + * + */ + TInt SvgStringtoEnumerationMappingSVGtoJSR(const TInt aAttrbuteId , TPtrC16 aValue); + /** + * Gets the Enumeration value mapping from JSR to SVG. Attribute t + * + */ + TInt SvgEnumerationMappingSVGtoJSR(const TInt aAttributeId, TInt32 aSvgEnumValue); + +private: + CSvgJavaInterfaceImpl(); + void ConstructL( TFontSpec& aFontSpec ); + void ConstructL(); + +private: + +}; + +#endif \ No newline at end of file diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/inc/SvgListener.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/SvgListener.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,415 @@ +/* +* Copyright (c) 2005 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: SVG Engine header file + * +*/ + + +#ifndef __INC_MSVGLISTENER__ +#define __INC_MSVGLISTENER__ + +#if !defined(__E32BASE_H__) +#include +#endif + +#include "MXMLAttributes.h" + +class CSvgElementImpl; + +// Typedef xml attribute list to allow switching of parser without +// having to change APIs for MLoadingListener. +typedef MXMLAttributes MSvgAttributeList; + +/** + * This empty virtual class is defined to be the root class for + * SVG Listener interfaces (all pure virtual functions). The MSvgListener + * name will be used for parameters of AddListener and RemoveListener + * along with a type parameter to specific the subclass. + * + * This will allow new Listener class to be added without having to + * add new Add/Remove listener methods to the exported interfaces. + * + * Existing listeners (Hyperlink, etc.) and their Add/Remove methods + * will remain the same. + */ +class MSvgListener + { + }; + +/** + * Enumeration to define supported listener classes for + * AddListener/RemoveListener methods. + */ +enum TSvgListenerType + { + ESvgLoadingListener = 0, + ESvgMouseListener, + ESvgHyperlinkListener, + ESvgTextAreaListener, + ESvgTextListener, + ESvgInteractiveElementListener, + ESvgViewPortListener + + }; + +/** + * This interface is the callback mechanism for the SVG Engine to communicate to + * interested clients about svg-file loading/parsing progress. The client (listener) is + * notified at the start and end of the document, at the start and end of an element. + * + * The ReportAllElements method controls if all elements should be reported or only + * the direct children of the root element is reported. + + * Included in this interface are notifications for external data requests: when one is + * initiated, received or failed. External data requests include embedded images or svg-files. + * + * @lib SVGEngine.lib + * @since 3.1 + */ +class MSvgLoadingListener : public MSvgListener + { + public: + + /** + * Query the listener if every element is to be reported or only + * the children of tag. + * + * @since 1.0 + * @return : ETrue if every element is to be reported, otherwise + * only the children of are reported. + */ + virtual TBool ReportAllElements() = 0; + + /** + * Query the listener if client will call 'AssignImageData' to decode images + * separately from parsing. This is used to avoid non-thread-safe calls in + * creating bitmap and decoding images, which must be executed in the main thread. + * + * @since 1.0 + * @return : ETrue to use 'ImageDataReference' instead of 'FetchImage'. + */ + virtual TBool WillAssignImageData() = 0; + + /** + * Callback when the href:xlink attribute is encountered for the + * element. This method is used to notify clients of image data references + * needed by element. This method is called only when 'WillAssignImageData' + * returns ETrue. + * + * @since 1.0 + * @return : none. + */ + virtual void ImageDataReference( const TDesC& aUri ) = 0; + + /** + * Notified when the start of a svg document( tag) is encountered. + * + * @since 1.0 + * @return : For future use. Value is ignored. + */ + virtual TBool DocumentStart() = 0; + + /** + * Notified when the end of a svg document( tag) is encountered. + * + * @since 1.0 + * @return : For future use. Value is ignored. + */ + virtual TBool DocumentEnd() = 0; + + /** + * Notified when the start of a svg element is encountered. + * + * @since 1.0 + * @param : aTagName -- name of svg tag + * @param : aAttributeList -- attribute list. + * @return : For future use. Value is ignored. + */ + virtual TBool ElementStart( const TDesC& aTagName, + MSvgAttributeList& aAttributeList) = 0; + + /** + * Notified when the end of a svg element is encountered. + * activated. + * + * @since 1.0 + * @param : aTagName -- name of svg tag + * @return : For future use. Value is ignored. + */ + virtual TBool ElementEnd( const TDesC& aTagName ) = 0; + + /** + * Notified when an external data is needed by the svg document, + * such as a image-file or an embedded svg-file. + * + * @since 1.0 + * @param : aUri -- URI string of external data + * @return : For future use. Value is ignored. + */ + virtual TBool ExternalDataRequested( const TDesC& aUri ) = 0; + + /** + * Notified when an external data has been retrieved, + * such as a image-file or an embedded svg-file. + * + * @since 1.0 + * @param : aUri -- URI string of external data + * @return : For future use. Value is ignored. + */ + virtual TBool ExternalDataReceived( const TDesC& aUri ) = 0; + + /** + * Notified when an external data request has failed. + * + * @since 1.0 + * @param : aUri -- URI string of external data + * @return : For future use. Value is ignored. + */ + virtual TBool ExternalDataRequestFailed( const TDesC& aUri ) = 0; + + /** + * Notified when an unsupported element is encountered. + * + * @since 1.0 + * @param : aTagName -- tag name of element + * @param : aAttributeList -- attribute list. + * @return : For future use. Value is ignored. + */ + virtual TBool UnsupportedElement( const TDesC& aTagName, + MSvgAttributeList& aAttributeList ) = 0; + + virtual void ImagesLoaded(TInt aError)=0; + + }; + +/** + * This interface is the callback mechanism for the SVG Engine to communicate to + * interested clients about mouse clicking + * + * + * @lib SVGEngine.lib + * @since 3.1 + */ +class MSvgMouseListener : public MSvgListener + { + public: + /** + * Notified when the mouse pointer enters a visible svg element. + * + * @since 1.0 + * param : aElements -- SVG elements containing the mouse point. + * param : aX -- x coordinate of mouse pointer. + * param : aY -- y coordinate of mouse pointer. + * @return : For future use. Value is ignored. + */ + virtual TBool MouseEntered( RPointerArray& aElements, + TInt aX, TInt aY ) = 0; + + /** + * Notified when the mouse pointer exits a visible svg element. + * + * @since 1.0 + * param : aElements -- SVG elements containing the mouse point. + * param : aX -- x coordinate of mouse pointer. + * param : aY -- y coordinate of mouse pointer. + * @return : For future use. Value is ignored. + */ + virtual TBool MouseExited( RPointerArray& aElements, + TInt aX, TInt aY ) = 0; + + /** + * Notified when the mouse pointer has already entered a visible + * svg element and just moved but remains inside its bounding-box. + * + * @since 1.0 + * param : aElements -- SVG elements containing the mouse point. + * param : aX -- x coordinate of mouse pointer. + * param : aY -- y coordinate of mouse pointer. + * @return : For future use. Value is ignored. + */ + virtual TBool MouseMoved( RPointerArray& aElements, + TInt aX, TInt aY ) = 0; + + /** + * Notified when the mouse pointer is pressed down on visible svg element. + * + * @since 1.0 + * param : aElements -- SVG elements containing the mouse point. + * param : aX -- x coordinate of mouse pointer. + * param : aY -- y coordinate of mouse pointer. + * @return : For future use. Value is ignored. + */ + virtual TBool MousePressed( RPointerArray& aElements, + TInt aX, TInt aY ) = 0; + + /** + * Notified when the mouse pointer is released on on visible svg element. + * + * @since 1.0 + * param : aElements -- SVG elements containing the mouse point. + * param : aX -- x coordinate of mouse pointer. + * param : aY -- y coordinate of mouse pointer. + * @return : For future use. Value is ignored. + */ + virtual TBool MouseReleased( RPointerArray& aElements, + TInt aX, TInt aY ) = 0; + + }; + +/** + * This interface is the callback mechanism for the SVG Engine to communicate to + * interested clients about text area interaction. + * + * @lib SVGEngine.lib + * @since 3.1 + */ +class MSvgTextAreaListener : public MSvgListener + { + public: + /** + * Notified when a pointer enters a textbox element. + * + * @since 1.0 + * @param : aUri -- handle of a textbox + * @return : For future use. Value is ignored. + */ + virtual TBool TextAreaEntered( TInt aTextAreaHandle ) = 0; + + /** + * Notified when a pointer exits a textbox element. + * + * @since 1.0 + * @param : aTextBox -- handle of a textbox + * @return : For future use. Value is ignored. + */ + virtual TBool TextAreaExited( TInt aTextAreaHandle ) = 0; + + /** + * This method is called to notify the client that a link has been + * activated. + * + * @since 1.0 + * @param : aUri -- handle of a textbox + * @return : For future use. Value is ignored. + */ + virtual TBool TextAreaActivated( TInt aTextAreaHandle ) = 0; + + }; + +/** + * This interface is the callback mechanism for the SVG Engine to communicate to + * interested clients about text element interaction. + * + * @lib SVGEngine.lib + * @since 3.1 + */ +class MSvgTextListener : public MSvgListener + { + public: + /** + * Notified when a pointer enters a text element. + * + * @since 1.0 + * @param : aUri -- handle of a text + * @return : For future use. Value is ignored. + */ + virtual TBool TextEntered( TInt aTextHandle ) = 0; + + /** + * Notified when a pointer exits a text element. + * + * @since 1.0 + * @param : aText -- handle of a text + * @return : For future use. Value is ignored. + */ + virtual TBool TextExited( TInt aTextHandle ) = 0; + + /** + * This method is called to notify the client that a link has been + * activated. + * + * @since 1.0 + * @param : aUri -- handle of a text + * @return : For future use. Value is ignored. + */ + virtual TBool TextActivated( TInt aTextHandle ) = 0; + + }; + class MSvgViewPortListener : public MSvgListener + { + public: + /** + * + * + * @since 1.0 + * @param aErrorStatus : error status if any. + * @return + */ + virtual void GetViewPort(TInt getWidth, TInt getHeight, TBool isWidthInPer, TBool isHeightInPer, TInt &setWidth, TInt &setHeight) = 0; + }; + +/** + * This interface is the callback mechanism for the SVG Engine to communicate to + * interested clients about interactive elements in the svg content. + * + * @lib SVGEngine.lib + * @since v3.2 + */ +class MSvgInteractiveElementListener: public MSvgListener + { + public: + + /** + * Notified when a pointer enters an interactive element. + * @Since v3.2 + * @param : aElementIdPtr - Pointer to the xml Id of the element + * if exists else points to an empty string + * @param : aInteractonTypeList - Indicates the the type interactions + * possible with that element + * e.g: aInteractonTypeList=0x9 then "focusin" and "click" + * events are possible interaction types for the element *interactive events + * @return: For future use. Value can be ignored + */ + virtual TBool InteractiveElementEntered(TPtrC aElementIdPtr, TUint16 aInteractonTypeList ) = 0; + + /** + * Notified when a pointer exits from an interactive element. + * @Since v3.2 + * @param : aElementIdPtr - Pointer to the xml Id of the element + * if exists else points to an empty string + * @return: For future use.Value can be ignored + */ + + virtual TBool InteractiveElementExited(TPtrC aElementIdPtr ) = 0; + + }; + +/** + * Enumeration to define supported interactive events + * for the elements. + */ +enum TSvgInteractionEvent + { + ESvgInteractiveEventFocusin = 0x1, + ESvgInteractiveEventFocusout = 0x2, + ESvgInteractiveEventActivate = 0x4, + ESvgInteractiveEventClick = 0x8, + ESvgInteractiveEventMousedown = 0x10, + ESvgInteractiveEventMouseup = 0x20, + ESvgInteractiveEventMouseover = 0x40, + ESvgInteractiveEventMousemove = 0x80, + ESvgInteractiveEventMouseout = 0x100 + }; + +#endif /*__INC_MSVGLISTENER__*/ diff -r 000000000000 -r d46562c3d99d svgt_plat/svgt_api/svgt_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/svgt_api.metaxml Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,19 @@ + + + SVGT API + Prrovides for parsing, decoding, manipulating, and managing of SVG content. + c++ + domain + + + + + + + + + + no + no + + diff -r 000000000000 -r d46562c3d99d svgtopt/SVG/SVGEngine/BWINSCW/SVGENGINE-OpenVGU.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVG/SVGEngine/BWINSCW/SVGENGINE-OpenVGU.def Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,194 @@ +EXPORTS + ??0CSvgEngineInterfaceImpl@@QAE@XZ @ 1 NONAME ; CSvgEngineInterfaceImpl::CSvgEngineInterfaceImpl(void) + ??1CSvgEngineInterfaceImpl@@UAE@XZ @ 2 NONAME ; CSvgEngineInterfaceImpl::~CSvgEngineInterfaceImpl(void) + ?ADDCloseTo@CSvgEngineInterfaceImpl@@QAEXPAVCGfxGeneralPath@@@Z @ 3 NONAME ; void CSvgEngineInterfaceImpl::ADDCloseTo(class CGfxGeneralPath *) + ?ADDCurveTo@CSvgEngineInterfaceImpl@@QAEXPAVCGfxGeneralPath@@MMMMMM@Z @ 4 NONAME ; void CSvgEngineInterfaceImpl::ADDCurveTo(class CGfxGeneralPath *, float, float, float, float, float, float) + ?ADDLineTo@CSvgEngineInterfaceImpl@@QAEXPAVCGfxGeneralPath@@MM@Z @ 5 NONAME ; void CSvgEngineInterfaceImpl::ADDLineTo(class CGfxGeneralPath *, float, float) + ?ADDMoveTo@CSvgEngineInterfaceImpl@@QAEXPAVCGfxGeneralPath@@MM@Z @ 6 NONAME ; void CSvgEngineInterfaceImpl::ADDMoveTo(class CGfxGeneralPath *, float, float) + ?ADDQuadTo@CSvgEngineInterfaceImpl@@QAEXPAVCGfxGeneralPath@@MMMM@Z @ 7 NONAME ; void CSvgEngineInterfaceImpl::ADDQuadTo(class CGfxGeneralPath *, float, float, float, float) + ?ActivateObjectInFocus@CSvgEngineInterfaceImpl@@QAEXXZ @ 8 NONAME ; void CSvgEngineInterfaceImpl::ActivateObjectInFocus(void) + ?AddAnimationListener@CSvgEngineInterfaceImpl@@QAEXPAVMSvgAnimationListener@@H@Z @ 9 NONAME ; void CSvgEngineInterfaceImpl::AddAnimationListener(class MSvgAnimationListener *, int) + ?AddExternalData@CSvgEngineInterfaceImpl@@QAEPAVCSvgElementImpl@@PAVCSvgDocumentImpl@@ABVTDesC16@@ABVTDesC8@@HHH@Z @ 10 NONAME ; class CSvgElementImpl * CSvgEngineInterfaceImpl::AddExternalData(class CSvgDocumentImpl *, class TDesC16 const &, class TDesC8 const &, int, int, int) + ?AddHyperlinkListener@CSvgEngineInterfaceImpl@@QAEXPAVMSvgHyperlinkListener@@H@Z @ 11 NONAME ; void CSvgEngineInterfaceImpl::AddHyperlinkListener(class MSvgHyperlinkListener *, int) + ?AddListener@CSvgEngineInterfaceImpl@@QAEXPBVMSvgListener@@W4TSvgListenerType@@H@Z @ 12 NONAME ; void CSvgEngineInterfaceImpl::AddListener(class MSvgListener const *, enum TSvgListenerType, int) + ?AddTextAreaListener@CSvgEngineInterfaceImpl@@QAEHPAVMSvgTextAreaListener@@H@Z @ 13 NONAME ; int CSvgEngineInterfaceImpl::AddTextAreaListener(class MSvgTextAreaListener *, int) + ?AddTextListener@CSvgEngineInterfaceImpl@@QAEHPAVMSvgTextListener@@H@Z @ 14 NONAME ; int CSvgEngineInterfaceImpl::AddTextListener(class MSvgTextListener *, int) + ?AddToEventReceiverList@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@E@Z @ 15 NONAME ; void CSvgEngineInterfaceImpl::AddToEventReceiverList(class CXmlElementImpl *, unsigned char) + ?AppendChild@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@0H@Z @ 16 NONAME ; void CSvgEngineInterfaceImpl::AppendChild(class CXmlElementImpl *, class CXmlElementImpl *, int) + ?AssignImageData@CSvgEngineInterfaceImpl@@QAEXABVTDesC16@@PAVHBufC8@@@Z @ 17 NONAME ; void CSvgEngineInterfaceImpl::AssignImageData(class TDesC16 const &, class HBufC8 *) + ?CancelLoad@CSvgEngineInterfaceImpl@@QAEXH@Z @ 18 NONAME ; void CSvgEngineInterfaceImpl::CancelLoad(int) + ?ChooseViewBoxIfNotSet@CSvgEngineInterfaceImpl@@QAEXH@Z @ 19 NONAME ; void CSvgEngineInterfaceImpl::ChooseViewBoxIfNotSet(int) + ?ClearFrameBuffer@CSvgEngineInterfaceImpl@@QAEXPAVCFbsBitmap@@KH@Z @ 20 NONAME ; void CSvgEngineInterfaceImpl::ClearFrameBuffer(class CFbsBitmap *, unsigned long, int) + ?ConstructL@CSvgEngineInterfaceImpl@@IAEXPAVCFbsBitmap@@PAVMSvgRequestObserver@@AAVTFontSpec@@@Z @ 21 NONAME ; void CSvgEngineInterfaceImpl::ConstructL(class CFbsBitmap *, class MSvgRequestObserver *, class TFontSpec &) + ?ConstructL@CSvgEngineInterfaceImpl@@IAEXXZ @ 22 NONAME ; void CSvgEngineInterfaceImpl::ConstructL(void) + ?ContentDimensions@CSvgEngineInterfaceImpl@@QAE?AVTSize@@H@Z @ 23 NONAME ; class TSize CSvgEngineInterfaceImpl::ContentDimensions(int) + ?ContentDimensions@CSvgEngineInterfaceImpl@@QAEXAAM0H@Z @ 24 NONAME ; void CSvgEngineInterfaceImpl::ContentDimensions(float &, float &, int) + ?ContentDimensionsInPercentage@CSvgEngineInterfaceImpl@@QAE?AVTSize@@H@Z @ 25 NONAME ; class TSize CSvgEngineInterfaceImpl::ContentDimensionsInPercentage(int) + ?CreateElementL@CSvgEngineInterfaceImpl@@QAEPAVCXmlElementImpl@@PAVCSvgDocumentImpl@@H@Z @ 26 NONAME ; class CXmlElementImpl * CSvgEngineInterfaceImpl::CreateElementL(class CSvgDocumentImpl *, int) + ?CurrentState@CSvgEngineInterfaceImpl@@QAEHH@Z @ 27 NONAME ; int CSvgEngineInterfaceImpl::CurrentState(int) + ?CustomOption@CSvgEngineInterfaceImpl@@QAEXHH@Z @ 28 NONAME ; void CSvgEngineInterfaceImpl::CustomOption(int, int) + ?DeleteDom@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@H@Z @ 29 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::DeleteDom(int) + ?Destroy@CSvgEngineInterfaceImpl@@QAEXXZ @ 30 NONAME ; void CSvgEngineInterfaceImpl::Destroy(void) + ?DestroyDocument@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@@Z @ 31 NONAME ; void CSvgEngineInterfaceImpl::DestroyDocument(class CSvgDocumentImpl *) + ?DestroyElement@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@@Z @ 32 NONAME ; void CSvgEngineInterfaceImpl::DestroyElement(class CXmlElementImpl *) + ?DestroyEngine@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@@Z @ 33 NONAME ; void CSvgEngineInterfaceImpl::DestroyEngine(class CSvgEngineImpl *) + ?DispatchFocusInEvent@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@PAVCSvgElementImpl@@@Z @ 34 NONAME ; void CSvgEngineInterfaceImpl::DispatchFocusInEvent(class CSvgDocumentImpl *, class CSvgElementImpl *) + ?DispatchFocusOutEvent@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@PAVCSvgElementImpl@@@Z @ 35 NONAME ; void CSvgEngineInterfaceImpl::DispatchFocusOutEvent(class CSvgDocumentImpl *, class CSvgElementImpl *) + ?DispatchMouseEventsAt@CSvgEngineInterfaceImpl@@QAEHPAVCSvgDocumentImpl@@HHPAVMSvgMouseListener@@@Z @ 36 NONAME ; int CSvgEngineInterfaceImpl::DispatchMouseEventsAt(class CSvgDocumentImpl *, int, int, class MSvgMouseListener *) + ?DrawBox@CSvgEngineInterfaceImpl@@QAEPAVCSvgElementImpl@@VTRect@@H@Z @ 37 NONAME ; class CSvgElementImpl * CSvgEngineInterfaceImpl::DrawBox(class TRect, int) + ?Duration@CSvgEngineInterfaceImpl@@QAEKH@Z @ 38 NONAME ; unsigned long CSvgEngineInterfaceImpl::Duration(int) + ?FillDocumentL@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@ABVTDesC16@@@Z @ 39 NONAME ; void CSvgEngineInterfaceImpl::FillDocumentL(class CSvgDocumentImpl *, class TDesC16 const &) + ?FindAllElements@CSvgEngineInterfaceImpl@@QAEXPAVCSvgElementImpl@@HAAV?$RPointerArray@VCSvgElementImpl@@@@H@Z @ 40 NONAME ; void CSvgEngineInterfaceImpl::FindAllElements(class CSvgElementImpl *, int, class RPointerArray &, int) + ?FocusNext@CSvgEngineInterfaceImpl@@QAE?AVTRect@@XZ @ 41 NONAME ; class TRect CSvgEngineInterfaceImpl::FocusNext(void) + ?FocusPrevious@CSvgEngineInterfaceImpl@@QAE?AVTRect@@XZ @ 42 NONAME ; class TRect CSvgEngineInterfaceImpl::FocusPrevious(void) + ?FramesPerSecond@CSvgEngineInterfaceImpl@@QAENHH@Z @ 43 NONAME ; double CSvgEngineInterfaceImpl::FramesPerSecond(int, int) + ?GenerateMask@CSvgEngineInterfaceImpl@@QAEXPAVCFbsBitmap@@H@Z @ 44 NONAME ; void CSvgEngineInterfaceImpl::GenerateMask(class CFbsBitmap *, int) + ?GetAttribute@CSvgSvgElementImpl@@QAEHABVTDesC16@@AAVTDes16@@@Z @ 45 NONAME ; int CSvgSvgElementImpl::GetAttribute(class TDesC16 const &, class TDes16 &) + ?GetElementBoundingbox@CSvgEngineInterfaceImpl@@QAEXPAVCSvgElementImpl@@AAM111@Z @ 46 NONAME ; void CSvgEngineInterfaceImpl::GetElementBoundingbox(class CSvgElementImpl *, float &, float &, float &, float &) + ?GetElementById@CSvgEngineInterfaceImpl@@QAEPAVCXmlElementImpl@@PAVCSvgDocumentImpl@@ABVTDesC16@@@Z @ 47 NONAME ; class CXmlElementImpl * CSvgEngineInterfaceImpl::GetElementById(class CSvgDocumentImpl *, class TDesC16 const &) + ?GetElementColorAttribute@CSvgEngineInterfaceImpl@@QAEJPAVCSvgElementImpl@@H@Z @ 48 NONAME ; long CSvgEngineInterfaceImpl::GetElementColorAttribute(class CSvgElementImpl *, int) + ?GetElementDesAttribute@CSvgEngineInterfaceImpl@@QAEHPAVCSvgElementImpl@@HAAVTPtrC16@@@Z @ 49 NONAME ; int CSvgEngineInterfaceImpl::GetElementDesAttribute(class CSvgElementImpl *, int, class TPtrC16 &) + ?GetElementFloatAttribute@CSvgEngineInterfaceImpl@@QAEMPAVCSvgElementImpl@@H@Z @ 50 NONAME ; float CSvgEngineInterfaceImpl::GetElementFloatAttribute(class CSvgElementImpl *, int) + ?GetElementType@CSvgEngineInterfaceImpl@@QAEHPAVCXmlElementImpl@@@Z @ 51 NONAME ; int CSvgEngineInterfaceImpl::GetElementType(class CXmlElementImpl *) + ?GetElementUnScaledBoundingBox@CSvgEngineInterfaceImpl@@QAEXPAVCSvgElementImpl@@AAM111@Z @ 52 NONAME ; void CSvgEngineInterfaceImpl::GetElementUnScaledBoundingBox(class CSvgElementImpl *, float &, float &, float &, float &) + ?GetEnumAttribute@CSvgEngineInterfaceImpl@@QAEHPAVCSvgElementImpl@@HAAJ@Z @ 53 NONAME ; int CSvgEngineInterfaceImpl::GetEnumAttribute(class CSvgElementImpl *, int, long &) + ?GetExternalListItemL@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@HAAVTPtrC16@@@Z @ 54 NONAME ; void CSvgEngineInterfaceImpl::GetExternalListItemL(class CSvgDocumentImpl *, int, class TPtrC16 &) + ?GetExternalListSize@CSvgEngineInterfaceImpl@@QAEHPAVCSvgDocumentImpl@@@Z @ 55 NONAME ; int CSvgEngineInterfaceImpl::GetExternalListSize(class CSvgDocumentImpl *) + ?GetFirstChild@CSvgEngineInterfaceImpl@@QAEPAVCXmlElementImpl@@PAV2@@Z @ 56 NONAME ; class CXmlElementImpl * CSvgEngineInterfaceImpl::GetFirstChild(class CXmlElementImpl *) + ?GetFocusedElement@CSvgEngineInterfaceImpl@@QAEPAVCXmlElementImpl@@PAVCSvgDocumentImpl@@@Z @ 57 NONAME ; class CXmlElementImpl * CSvgEngineInterfaceImpl::GetFocusedElement(class CSvgDocumentImpl *) + ?GetFourPointElementBoundingBox@CSvgEngineInterfaceImpl@@QAEXPAVCSvgTextElementImpl@@AAVTPoint@@111@Z @ 58 NONAME ; void CSvgEngineInterfaceImpl::GetFourPointElementBoundingBox(class CSvgTextElementImpl *, class TPoint &, class TPoint &, class TPoint &, class TPoint &) + ?GetId@CSvgEngineInterfaceImpl@@QAEPAVTDesC16@@PAVCSvgDocumentImpl@@H@Z @ 59 NONAME ; class TDesC16 * CSvgEngineInterfaceImpl::GetId(class CSvgDocumentImpl *, int) + ?GetMatrixAttribute@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@PAM11111@Z @ 60 NONAME ; void CSvgEngineInterfaceImpl::GetMatrixAttribute(class CXmlElementImpl *, float *, float *, float *, float *, float *, float *) + ?GetNextSibling@CSvgEngineInterfaceImpl@@QAEPAVCXmlElementImpl@@PAV2@@Z @ 61 NONAME ; class CXmlElementImpl * CSvgEngineInterfaceImpl::GetNextSibling(class CXmlElementImpl *) + ?GetNumberOfIds@CSvgEngineInterfaceImpl@@QAEHPAVCSvgDocumentImpl@@@Z @ 62 NONAME ; int CSvgEngineInterfaceImpl::GetNumberOfIds(class CSvgDocumentImpl *) + ?GetOwnerDocument@CSvgEngineInterfaceImpl@@QAEPAVCSvgDocumentImpl@@PAVCXmlElementImpl@@@Z @ 63 NONAME ; class CSvgDocumentImpl * CSvgEngineInterfaceImpl::GetOwnerDocument(class CXmlElementImpl *) + ?GetParentElement@CSvgEngineInterfaceImpl@@QAEPAVCXmlElementImpl@@PAV2@@Z @ 64 NONAME ; class CXmlElementImpl * CSvgEngineInterfaceImpl::GetParentElement(class CXmlElementImpl *) + ?GetPathAttribute@CSvgEngineInterfaceImpl@@QAEPAVCGfxGeneralPath@@PAVCXmlElementImpl@@H@Z @ 65 NONAME ; class CGfxGeneralPath * CSvgEngineInterfaceImpl::GetPathAttribute(class CXmlElementImpl *, int) + ?GetRectAttribute@CSvgEngineInterfaceImpl@@QAEHPAVCXmlElementImpl@@PAM111@Z @ 66 NONAME ; int CSvgEngineInterfaceImpl::GetRectAttribute(class CXmlElementImpl *, float *, float *, float *, float *) + ?GetRenderQuality@CSvgEngineInterfaceImpl@@QAEIXZ @ 67 NONAME ; unsigned int CSvgEngineInterfaceImpl::GetRenderQuality(void) + ?GetRootElement@CSvgEngineInterfaceImpl@@QAEPAVCXmlElementImpl@@PAVCSvgDocumentImpl@@@Z @ 68 NONAME ; class CXmlElementImpl * CSvgEngineInterfaceImpl::GetRootElement(class CSvgDocumentImpl *) + ?GetSegmentCount@CSvgEngineInterfaceImpl@@QAEHPAVCGfxGeneralPath@@@Z @ 69 NONAME ; int CSvgEngineInterfaceImpl::GetSegmentCount(class CGfxGeneralPath *) + ?GetSegmentParameter@CSvgEngineInterfaceImpl@@QAEMPAVCGfxGeneralPath@@HH@Z @ 70 NONAME ; float CSvgEngineInterfaceImpl::GetSegmentParameter(class CGfxGeneralPath *, int, int) + ?GetSegmentType@CSvgEngineInterfaceImpl@@QAEHPAVCGfxGeneralPath@@H@Z @ 71 NONAME ; int CSvgEngineInterfaceImpl::GetSegmentType(class CGfxGeneralPath *, int) + ?GetSvgBoundingBox@CSvgEngineInterfaceImpl@@QAE?AVTRect@@H@Z @ 72 NONAME ; class TRect CSvgEngineInterfaceImpl::GetSvgBoundingBox(int) + ?GetTextForTextAreaElement@CSvgEngineInterfaceImpl@@QAEHHAAHAAVTDes16@@@Z @ 73 NONAME ; int CSvgEngineInterfaceImpl::GetTextForTextAreaElement(int, int &, class TDes16 &) + ?GetTextForTextElement@CSvgEngineInterfaceImpl@@QAEHHAAHAAVTDes16@@@Z @ 74 NONAME ; int CSvgEngineInterfaceImpl::GetTextForTextElement(int, int &, class TDes16 &) + ?GetUnscaledContentSize@CSvgEngineInterfaceImpl@@QAE?AVTSize@@H@Z @ 75 NONAME ; class TSize CSvgEngineInterfaceImpl::GetUnscaledContentSize(int) + ?GetViewportHeight@CSvgEngineInterfaceImpl@@QAEHPAVCSvgDocumentImpl@@@Z @ 76 NONAME ; int CSvgEngineInterfaceImpl::GetViewportHeight(class CSvgDocumentImpl *) + ?GetViewportUnits@CSvgEngineInterfaceImpl@@QAEHPAVCSvgDocumentImpl@@@Z @ 77 NONAME ; int CSvgEngineInterfaceImpl::GetViewportUnits(class CSvgDocumentImpl *) + ?GetViewportWidth@CSvgEngineInterfaceImpl@@QAEHPAVCSvgDocumentImpl@@@Z @ 78 NONAME ; int CSvgEngineInterfaceImpl::GetViewportWidth(class CSvgDocumentImpl *) + ?InitRootElement@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@@Z @ 79 NONAME ; void CSvgEngineInterfaceImpl::InitRootElement(class CSvgDocumentImpl *) + ?InitSvgStylePropertiesWithNullL@CSvgEngineInterfaceImpl@@QAEXPAVCSvgElementImpl@@@Z @ 80 NONAME ; void CSvgEngineInterfaceImpl::InitSvgStylePropertiesWithNullL(class CSvgElementImpl *) + ?InitializeEngine@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@H@Z @ 81 NONAME ; void CSvgEngineInterfaceImpl::InitializeEngine(class CSvgEngineImpl *, int) + ?IsContentInteractive@CSvgEngineInterfaceImpl@@QAEHPAVCSvgDocumentImpl@@H@Z @ 82 NONAME ; int CSvgEngineInterfaceImpl::IsContentInteractive(class CSvgDocumentImpl *, int) + ?IsElementActive@CSvgEngineInterfaceImpl@@QAEHPAVCSvgElementImpl@@@Z @ 83 NONAME ; int CSvgEngineInterfaceImpl::IsElementActive(class CSvgElementImpl *) + ?IsElementVisible@CSvgEngineInterfaceImpl@@QAEHHH@Z @ 84 NONAME ; int CSvgEngineInterfaceImpl::IsElementVisible(int, int) + ?IsLoading@CSvgEngineInterfaceImpl@@QAEHH@Z @ 85 NONAME ; int CSvgEngineInterfaceImpl::IsLoading(int) + ?IsPanPossible@CSvgEngineInterfaceImpl@@QAEHHHH@Z @ 86 NONAME ; int CSvgEngineInterfaceImpl::IsPanPossible(int, int, int) + ?IsPanPossibleFourWay@CSvgEngineInterfaceImpl@@QAEXAAH000H@Z @ 87 NONAME ; void CSvgEngineInterfaceImpl::IsPanPossibleFourWay(int &, int &, int &, int &, int) + ?IsRemoveable@CSvgEngineInterfaceImpl@@QAEHPAVCSvgElementImpl@@H@Z @ 88 NONAME ; int CSvgEngineInterfaceImpl::IsRemoveable(class CSvgElementImpl *, int) + ?KeyPress@CSvgEngineInterfaceImpl@@QAEXABUTKeyEvent@@H@Z @ 89 NONAME ; void CSvgEngineInterfaceImpl::KeyPress(struct TKeyEvent const &, int) + ?Load@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@AAVRFile@@@Z @ 90 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::Load(class RFile &) + ?Load@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@ABVTDesC16@@@Z @ 91 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::Load(class TDesC16 const &) + ?Load@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@ABVTDesC8@@@Z @ 92 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::Load(class TDesC8 const &) + ?MediaTime@CSvgEngineInterfaceImpl@@QAEJH@Z @ 93 NONAME ; long CSvgEngineInterfaceImpl::MediaTime(int) + ?MouseDown@CSvgEngineInterfaceImpl@@QAEHHHH@Z @ 94 NONAME ; int CSvgEngineInterfaceImpl::MouseDown(int, int, int) + ?MouseMove@CSvgEngineInterfaceImpl@@QAEXHHH@Z @ 95 NONAME ; void CSvgEngineInterfaceImpl::MouseMove(int, int, int) + ?MouseUp@CSvgEngineInterfaceImpl@@QAEXHHH@Z @ 96 NONAME ; void CSvgEngineInterfaceImpl::MouseUp(int, int, int) + ?NewL@CSvgEngineInterfaceImpl@@SAPAV1@PAVCFbsBitmap@@PAVMSvgRequestObserver@@AAVTFontSpec@@@Z @ 97 NONAME ; class CSvgEngineInterfaceImpl * CSvgEngineInterfaceImpl::NewL(class CFbsBitmap *, class MSvgRequestObserver *, class TFontSpec &) + ?NewLC@CSvgEngineInterfaceImpl@@SAPAV1@PAVCFbsBitmap@@PAVMSvgRequestObserver@@AAVTFontSpec@@@Z @ 98 NONAME ; class CSvgEngineInterfaceImpl * CSvgEngineInterfaceImpl::NewLC(class CFbsBitmap *, class MSvgRequestObserver *, class TFontSpec &) + ?OriginalView@CSvgEngineInterfaceImpl@@QAEXH@Z @ 99 NONAME ; void CSvgEngineInterfaceImpl::OriginalView(int) + ?Pan@CSvgEngineInterfaceImpl@@QAEXHHH@Z @ 100 NONAME ; void CSvgEngineInterfaceImpl::Pan(int, int, int) + ?PanPosition@CSvgEngineInterfaceImpl@@QAE?AVTPoint@@H@Z @ 101 NONAME ; class TPoint CSvgEngineInterfaceImpl::PanPosition(int) + ?Pause@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@@Z @ 102 NONAME ; void CSvgEngineInterfaceImpl::Pause(class CSvgEngineImpl *) + ?Position@CSvgEngineInterfaceImpl@@QAE?AVTPoint@@H@Z @ 103 NONAME ; class TPoint CSvgEngineInterfaceImpl::Position(int) + ?PrepareDom@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@AAVRFile@@AAHH@Z @ 104 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::PrepareDom(class RFile &, int &, int) + ?PrepareDom@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@ABVTDesC16@@AAHH@Z @ 105 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::PrepareDom(class TDesC16 const &, int &, int) + ?PrepareDom@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@ABVTDesC8@@AAHH@Z @ 106 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::PrepareDom(class TDesC8 const &, int &, int) + ?PrintAllElements@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@@Z @ 107 NONAME ; void CSvgEngineInterfaceImpl::PrintAllElements(class CSvgDocumentImpl *) + ?PrintElementsStyles@CSvgEngineInterfaceImpl@@QAEXPAVCSvgElementImpl@@@Z @ 108 NONAME ; void CSvgEngineInterfaceImpl::PrintElementsStyles(class CSvgElementImpl *) + ?Redraw@CSvgEngineInterfaceImpl@@QAEXHH@Z @ 109 NONAME ; void CSvgEngineInterfaceImpl::Redraw(int, int) + ?RemoveAnimationListener@CSvgEngineInterfaceImpl@@QAEXPAVMSvgAnimationListener@@H@Z @ 110 NONAME ; void CSvgEngineInterfaceImpl::RemoveAnimationListener(class MSvgAnimationListener *, int) + ?RemoveChild@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@0@Z @ 111 NONAME ; void CSvgEngineInterfaceImpl::RemoveChild(class CXmlElementImpl *, class CXmlElementImpl *) + ?RemoveFromEventReceiverList@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@@Z @ 112 NONAME ; void CSvgEngineInterfaceImpl::RemoveFromEventReceiverList(class CXmlElementImpl *) + ?RemoveHyperlinkListener@CSvgEngineInterfaceImpl@@QAEXPAVMSvgHyperlinkListener@@H@Z @ 113 NONAME ; void CSvgEngineInterfaceImpl::RemoveHyperlinkListener(class MSvgHyperlinkListener *, int) + ?RemoveListener@CSvgEngineInterfaceImpl@@QAEXPBVMSvgListener@@W4TSvgListenerType@@H@Z @ 114 NONAME ; void CSvgEngineInterfaceImpl::RemoveListener(class MSvgListener const *, enum TSvgListenerType, int) + ?RemoveTextAreaListener@CSvgEngineInterfaceImpl@@QAEHPAVMSvgTextAreaListener@@H@Z @ 115 NONAME ; int CSvgEngineInterfaceImpl::RemoveTextAreaListener(class MSvgTextAreaListener *, int) + ?RemoveTextListener@CSvgEngineInterfaceImpl@@QAEHPAVMSvgTextListener@@H@Z @ 116 NONAME ; int CSvgEngineInterfaceImpl::RemoveTextListener(class MSvgTextListener *, int) + ?RenderDom@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@HPAVCFbsBitmap@@0@Z @ 117 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::RenderDom(int, class CFbsBitmap *, class CFbsBitmap *) + ?RenderFrame@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@I@Z @ 118 NONAME ; void CSvgEngineInterfaceImpl::RenderFrame(class CSvgEngineImpl *, unsigned int) + ?RenderFrames@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@HABVTSize@@IIIW4TDisplayMode@@1AAV?$RPointerArray@VCFbsBitmap@@@@2AAV?$RArray@I@@H@Z @ 119 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::RenderFrames(int, class TSize const &, unsigned int, unsigned int, unsigned int, enum TDisplayMode, enum TDisplayMode, class RPointerArray &, class RPointerArray &, class RArray &, int) + ?Replay@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@H@Z @ 120 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::Replay(int) + ?Resume@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@@Z @ 121 NONAME ; void CSvgEngineInterfaceImpl::Resume(class CSvgEngineImpl *) + ?RootElement@CSvgDocumentImpl@@QAEPAVMXmlElement@@XZ @ 122 NONAME ; class MXmlElement * CSvgDocumentImpl::RootElement(void) + ?Rotate@CSvgEngineInterfaceImpl@@QAEXMHHH@Z @ 123 NONAME ; void CSvgEngineInterfaceImpl::Rotate(float, int, int, int) + ?SVGElementGetUsedElement@CSvgEngineInterfaceImpl@@QAEPAVCXmlElementImpl@@PAV2@@Z @ 124 NONAME ; class CXmlElementImpl * CSvgEngineInterfaceImpl::SVGElementGetUsedElement(class CXmlElementImpl *) + ?SVGElementInDom@CSvgEngineInterfaceImpl@@QAEHPAVCSvgDocumentImpl@@PAVCXmlElementImpl@@@Z @ 125 NONAME ; int CSvgEngineInterfaceImpl::SVGElementInDom(class CSvgDocumentImpl *, class CXmlElementImpl *) + ?SaveSvg@CSvgEngineInterfaceImpl@@QAEXHABVTDesC16@@H@Z @ 126 NONAME ; void CSvgEngineInterfaceImpl::SaveSvg(int, class TDesC16 const &, int) + ?SaveSvgDom@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@HABVTDesC16@@H@Z @ 127 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::SaveSvgDom(int, class TDesC16 const &, int) + ?SearchForText@CSvgEngineInterfaceImpl@@QAEHABVTDesC16@@AAV?$RPointerArray@VMRect@@@@AAV?$RArray@VTPtrC16@@@@AAV?$RArray@H@@HH@Z @ 128 NONAME ; int CSvgEngineInterfaceImpl::SearchForText(class TDesC16 const &, class RPointerArray &, class RArray &, class RArray &, int, int) + ?SetAnimFrameDuration@CSvgEngineInterfaceImpl@@QAEXIH@Z @ 129 NONAME ; void CSvgEngineInterfaceImpl::SetAnimFrameDuration(unsigned int, int) + ?SetBackgroundColor@CSvgEngineInterfaceImpl@@QAEXKPAVCSvgEngineImpl@@@Z @ 130 NONAME ; void CSvgEngineInterfaceImpl::SetBackgroundColor(unsigned long, class CSvgEngineImpl *) + ?SetClientWindow@CSvgEngineInterfaceImpl@@QAEXPAVRWindow@@@Z @ 131 NONAME ; void CSvgEngineInterfaceImpl::SetClientWindow(class RWindow *) + ?SetDRMMode@CSvgEngineInterfaceImpl@@QAEXHH@Z @ 132 NONAME ; void CSvgEngineInterfaceImpl::SetDRMMode(int, int) + ?SetDataRetrievalTimeOut@CSvgEngineInterfaceImpl@@QAEXIH@Z @ 133 NONAME ; void CSvgEngineInterfaceImpl::SetDataRetrievalTimeOut(unsigned int, int) + ?SetDocument@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@PAVCSvgDocumentImpl@@@Z @ 134 NONAME ; void CSvgEngineInterfaceImpl::SetDocument(class CSvgEngineImpl *, class CSvgDocumentImpl *) + ?SetElementColorAttribute@CSvgEngineInterfaceImpl@@QAEXPAVCSvgElementImpl@@HJ@Z @ 135 NONAME ; void CSvgEngineInterfaceImpl::SetElementColorAttribute(class CSvgElementImpl *, int, long) + ?SetElementDesAttribute@CSvgEngineInterfaceImpl@@QAEXPAVCSvgElementImpl@@HABVTDesC16@@@Z @ 136 NONAME ; void CSvgEngineInterfaceImpl::SetElementDesAttribute(class CSvgElementImpl *, int, class TDesC16 const &) + ?SetElementFloatAttribute@CSvgEngineInterfaceImpl@@QAEXPAVCSvgElementImpl@@HM@Z @ 137 NONAME ; void CSvgEngineInterfaceImpl::SetElementFloatAttribute(class CSvgElementImpl *, int, float) + ?SetEnumAttribute@CSvgEngineInterfaceImpl@@QAEXPAVCSvgElementImpl@@HJ@Z @ 138 NONAME ; void CSvgEngineInterfaceImpl::SetEnumAttribute(class CSvgElementImpl *, int, long) + ?SetFirstChildElement@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@0@Z @ 139 NONAME ; void CSvgEngineInterfaceImpl::SetFirstChildElement(class CXmlElementImpl *, class CXmlElementImpl *) + ?SetFocusElement@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@PAVCSvgDocumentImpl@@@Z @ 140 NONAME ; void CSvgEngineInterfaceImpl::SetFocusElement(class CXmlElementImpl *, class CSvgDocumentImpl *) + ?SetFrameBuffer@CSvgEngineInterfaceImpl@@QAEXPAVCFbsBitmap@@H@Z @ 141 NONAME ; void CSvgEngineInterfaceImpl::SetFrameBuffer(class CFbsBitmap *, int) + ?SetGdiContextL@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@PAVCFbsBitmap@@@Z @ 142 NONAME ; void CSvgEngineInterfaceImpl::SetGdiContextL(class CSvgEngineImpl *, class CFbsBitmap *) + ?SetMatrixAttribute@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@MMMMMM@Z @ 143 NONAME ; void CSvgEngineInterfaceImpl::SetMatrixAttribute(class CXmlElementImpl *, float, float, float, float, float, float) + ?SetMediaTime@CSvgEngineInterfaceImpl@@QAEXJH@Z @ 144 NONAME ; void CSvgEngineInterfaceImpl::SetMediaTime(long, int) + ?SetNextSibling@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@0@Z @ 145 NONAME ; void CSvgEngineInterfaceImpl::SetNextSibling(class CXmlElementImpl *, class CXmlElementImpl *) + ?SetParentElement@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@0@Z @ 146 NONAME ; void CSvgEngineInterfaceImpl::SetParentElement(class CXmlElementImpl *, class CXmlElementImpl *) + ?SetPathAttribute@CSvgEngineInterfaceImpl@@QAEXPAVCSvgElementImpl@@HPAVCGfxGeneralPath@@@Z @ 147 NONAME ; void CSvgEngineInterfaceImpl::SetPathAttribute(class CSvgElementImpl *, int, class CGfxGeneralPath *) + ?SetPreserveAspectRatio@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@W4TSvgPreserveAspectAlignType@@W4TSvgMeetOrSliceType@@H@Z @ 148 NONAME ; void CSvgEngineInterfaceImpl::SetPreserveAspectRatio(class CSvgDocumentImpl *, enum TSvgPreserveAspectAlignType, enum TSvgMeetOrSliceType, int) + ?SetRectAttribute@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@MMMM@Z @ 149 NONAME ; void CSvgEngineInterfaceImpl::SetRectAttribute(class CXmlElementImpl *, float, float, float, float) + ?SetRenderQuality@CSvgEngineInterfaceImpl@@QAEXIH@Z @ 150 NONAME ; void CSvgEngineInterfaceImpl::SetRenderQuality(unsigned int, int) + ?SetRequestObserver@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@PAVMSvgRequestObserver@@@Z @ 151 NONAME ; void CSvgEngineInterfaceImpl::SetRequestObserver(class CSvgEngineImpl *, class MSvgRequestObserver *) + ?SetSvgDimensionToFrameBuffer@CSvgEngineInterfaceImpl@@QAEXIIH@Z @ 152 NONAME ; void CSvgEngineInterfaceImpl::SetSvgDimensionToFrameBuffer(unsigned int, unsigned int, int) + ?SetTextForTextAreaElement@CSvgEngineInterfaceImpl@@QAEHHAAVTDesC16@@@Z @ 153 NONAME ; int CSvgEngineInterfaceImpl::SetTextForTextAreaElement(int, class TDesC16 &) + ?SetTextForTextElement@CSvgEngineInterfaceImpl@@QAEHHAAVTDesC16@@@Z @ 154 NONAME ; int CSvgEngineInterfaceImpl::SetTextForTextElement(int, class TDesC16 &) + ?SetThumbNailMode@CSvgEngineInterfaceImpl@@QAEXHH@Z @ 155 NONAME ; void CSvgEngineInterfaceImpl::SetThumbNailMode(int, int) + ?SetViewportHeight@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@H@Z @ 156 NONAME ; void CSvgEngineInterfaceImpl::SetViewportHeight(class CSvgDocumentImpl *, int) + ?SetViewportWidth@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@H@Z @ 157 NONAME ; void CSvgEngineInterfaceImpl::SetViewportWidth(class CSvgDocumentImpl *, int) + ?Size@CSvgEngineInterfaceImpl@@QAE?AVTSize@@H@Z @ 158 NONAME ; class TSize CSvgEngineInterfaceImpl::Size(int) + ?Start@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@H@Z @ 159 NONAME ; void CSvgEngineInterfaceImpl::Start(class CSvgEngineImpl *, int) + ?StartEngine@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@@Z @ 160 NONAME ; void CSvgEngineInterfaceImpl::StartEngine(class CSvgEngineImpl *) + ?Stop@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@@Z @ 161 NONAME ; void CSvgEngineInterfaceImpl::Stop(class CSvgEngineImpl *) + ?SvgActivateAnimation@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@@Z @ 162 NONAME ; void CSvgEngineInterfaceImpl::SvgActivateAnimation(class CSvgDocumentImpl *) + ?SvgBeginElementAt@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@KPAVCSvgDocumentImpl@@@Z @ 163 NONAME ; void CSvgEngineInterfaceImpl::SvgBeginElementAt(class CXmlElementImpl *, unsigned long, class CSvgDocumentImpl *) + ?SvgCreatePath@CSvgEngineInterfaceImpl@@QAEPAVCGfxGeneralPath@@XZ @ 164 NONAME ; class CGfxGeneralPath * CSvgEngineInterfaceImpl::SvgCreatePath(void) + ?SvgDestroyPath@CSvgEngineInterfaceImpl@@QAEXPAVCGfxGeneralPath@@@Z @ 165 NONAME ; void CSvgEngineInterfaceImpl::SvgDestroyPath(class CGfxGeneralPath *) + ?SvgDocument@CSvgEngineInterfaceImpl@@QAEPAVCSvgDocumentImpl@@XZ @ 166 NONAME ; class CSvgDocumentImpl * CSvgEngineInterfaceImpl::SvgDocument(void) + ?SvgDocumentNewL@CSvgEngineInterfaceImpl@@QAEPAVCSvgDocumentImpl@@XZ @ 167 NONAME ; class CSvgDocumentImpl * CSvgEngineInterfaceImpl::SvgDocumentNewL(void) + ?SvgEndElementAt@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@KPAVCSvgDocumentImpl@@@Z @ 168 NONAME ; void CSvgEngineInterfaceImpl::SvgEndElementAt(class CXmlElementImpl *, unsigned long, class CSvgDocumentImpl *) + ?SvgEngineNewL@CSvgEngineInterfaceImpl@@QAEPAVCSvgEngineImpl@@XZ @ 169 NONAME ; class CSvgEngineImpl * CSvgEngineInterfaceImpl::SvgEngineNewL(void) + ?SvgGetMediaTime@CSvgEngineInterfaceImpl@@QAEMPAVCSvgDocumentImpl@@@Z @ 170 NONAME ; float CSvgEngineInterfaceImpl::SvgGetMediaTime(class CSvgDocumentImpl *) + ?SvgHasAnimation@CSvgEngineInterfaceImpl@@QAEHPAVCSvgDocumentImpl@@@Z @ 171 NONAME ; int CSvgEngineInterfaceImpl::SvgHasAnimation(class CSvgDocumentImpl *) + ?SvgSetMediaTime@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@K@Z @ 172 NONAME ; void CSvgEngineInterfaceImpl::SvgSetMediaTime(class CSvgDocumentImpl *, unsigned long) + ?SwitchDebugInfo@CSvgEngineInterfaceImpl@@QAEXH@Z @ 173 NONAME ; void CSvgEngineInterfaceImpl::SwitchDebugInfo(int) + ?UpdatePath@CSvgEngineInterfaceImpl@@QAEXHPAVCSvgElementImpl@@@Z @ 174 NONAME ; void CSvgEngineInterfaceImpl::UpdatePath(int, class CSvgElementImpl *) + ?UseDom@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@HPAVCFbsBitmap@@0H@Z @ 175 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::UseDom(int, class CFbsBitmap *, class CFbsBitmap *, int) + ?ViewportInit@CSvgEngineInterfaceImpl@@QAEXPAVCSvgDocumentImpl@@@Z @ 176 NONAME ; void CSvgEngineInterfaceImpl::ViewportInit(class CSvgDocumentImpl *) + ?WaitForImages@CSvgEngineInterfaceImpl@@QAEXHH@Z @ 177 NONAME ; void CSvgEngineInterfaceImpl::WaitForImages(int, int) + ?Zoom@CSvgEngineInterfaceImpl@@QAEXMH@Z @ 178 NONAME ; void CSvgEngineInterfaceImpl::Zoom(float, int) + ?Start@CSvgEngineInterfaceImpl@@QAEXAAPAVMSvgError@@PAVCSvgEngineImpl@@@Z @ 179 NONAME ; void CSvgEngineInterfaceImpl::Start(class MSvgError * &, class CSvgEngineImpl *) + ?MuteAudioVolume@CSvgEngineInterfaceImpl@@QAEXH@Z @ 180 NONAME ; void CSvgEngineInterfaceImpl::MuteAudioVolume(int) + ?SetAudioVolume@CSvgEngineInterfaceImpl@@QAEXHH@Z @ 181 NONAME ; void CSvgEngineInterfaceImpl::SetAudioVolume(int, int) + ?SetDRMRights@CSvgEngineInterfaceImpl@@QAEXH@Z @ 182 NONAME ; void CSvgEngineInterfaceImpl::SetDRMRights(int) + ?GetMatrixAttribute@CSvgEngineInterfaceImpl@@QAEXPAVCXmlElementImpl@@HPAM11111@Z @ 183 NONAME ; void CSvgEngineInterfaceImpl::GetMatrixAttribute(class CXmlElementImpl *, int, float *, float *, float *, float *, float *, float *) + ?ConstructL@CSvgEngineInterfaceImpl@@IAEXPAVCFbsBitmap@@PAVMSvgRequestObserver@@AAVTFontSpec@@W4SVGRendererId@@@Z @ 184 NONAME ; void CSvgEngineInterfaceImpl::ConstructL(class CFbsBitmap *, class MSvgRequestObserver *, class TFontSpec &, SVGRendererId) + ?NewL@CSvgEngineInterfaceImpl@@SAPAV1@PAVCFbsBitmap@@PAVMSvgRequestObserver@@AAVTFontSpec@@W4SVGRendererId@@@Z @ 185 NONAME ; class CSvgEngineInterfaceImpl * CSvgEngineInterfaceImpl::NewL(class CFbsBitmap *, class MSvgRequestObserver *, class TFontSpec &, SVGRendererId)) + ?NewLC@CSvgEngineInterfaceImpl@@SAPAV1@PAVCFbsBitmap@@PAVMSvgRequestObserver@@AAVTFontSpec@@W4SVGRendererId@@@Z @ 186 NONAME ; class CSvgEngineInterfaceImpl * CSvgEngineInterfaceImpl::NewLC(class CFbsBitmap *, class MSvgRequestObserver *, class TFontSpec &, SVGRendererId)) + ?UseDom@CSvgEngineInterfaceImpl@@QAEPAVMSvgError@@HPAVCFbsBitmap@@0VTSize@@W4TDisplayMode@@2H@Z @ 187 NONAME ; class MSvgError * CSvgEngineInterfaceImpl::UseDom(int, class CFbsBitmap *, class CFbsBitmap *, class TSize, enum TDisplayMode, enum TDisplayMode, int) + ?Start@CSvgEngineInterfaceImpl@@QAEXAAPAVMSvgError@@PBVTDesC8@@PAVCSvgEngineImpl@@@Z @ 188 NONAME ; void CSvgEngineInterfaceImpl::Start(class MSvgError * &, class TDesC8 const *, class CSvgEngineImpl *) + ?Start@CSvgEngineInterfaceImpl@@QAEXPBVTDesC8@@PAVCSvgEngineImpl@@H@Z @ 189 NONAME ; void CSvgEngineInterfaceImpl::Start(class TDesC8 const *, class CSvgEngineImpl *, int) + ?ResetContext@CSvgEngineInterfaceImpl@@QAEXH@Z @ 190 NONAME ; void CSvgEngineInterfaceImpl::ResetContext(int) + ?ConstructL@CSvgEngineInterfaceImpl@@IAEXAAVTFontSpec@@@Z @ 191 NONAME ; void CSvgEngineInterfaceImpl::ConstructL(class TFontSpec &) + ?TLVEncodedData@CSvgEngineInterfaceImpl@@QBE?BVTPtrC8@@XZ @ 192 NONAME ; class TPtrC8 const CSvgEngineInterfaceImpl::TLVEncodedData(void) const + diff -r 000000000000 -r d46562c3d99d svgtopt/SVG/SVGEngine/eabi/SVGENGINE-OpenVGU.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVG/SVGEngine/eabi/SVGENGINE-OpenVGU.def Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,391 @@ +EXPORTS + _ZN16CSvgDocumentImpl11RootElementEv @ 1 NONAME + _ZN18CSvgSvgElementImpl12GetAttributeERK7TDesC16R6TDes16 @ 2 NONAME + _ZN23CSvgEngineInterfaceImpl10ADDCloseToEP15CGfxGeneralPath @ 3 NONAME + _ZN23CSvgEngineInterfaceImpl10ADDCurveToEP15CGfxGeneralPathffffff @ 4 NONAME + _ZN23CSvgEngineInterfaceImpl10CancelLoadEi @ 5 NONAME + _ZN23CSvgEngineInterfaceImpl10ConstructLEP10CFbsBitmapP19MSvgRequestObserverR9TFontSpec @ 6 NONAME + _ZN23CSvgEngineInterfaceImpl10ConstructLEv @ 7 NONAME + _ZN23CSvgEngineInterfaceImpl10PrepareDomER5RFileRii @ 8 NONAME + _ZN23CSvgEngineInterfaceImpl10PrepareDomERK6TDesC8Rii @ 9 NONAME + _ZN23CSvgEngineInterfaceImpl10PrepareDomERK7TDesC16Rii @ 10 NONAME + _ZN23CSvgEngineInterfaceImpl10SaveSvgDomEiRK7TDesC16i @ 11 NONAME + _ZN23CSvgEngineInterfaceImpl10SetDRMModeEii @ 12 NONAME + _ZN23CSvgEngineInterfaceImpl10UpdatePathEiP15CSvgElementImpl @ 13 NONAME + _ZN23CSvgEngineInterfaceImpl11AddListenerEPK12MSvgListener16TSvgListenerTypei @ 14 NONAME + _ZN23CSvgEngineInterfaceImpl11AppendChildEP15CXmlElementImplS1_i @ 15 NONAME + _ZN23CSvgEngineInterfaceImpl11PanPositionEi @ 16 NONAME + _ZN23CSvgEngineInterfaceImpl11RemoveChildEP15CXmlElementImplS1_ @ 17 NONAME + _ZN23CSvgEngineInterfaceImpl11RenderFrameEP14CSvgEngineImplj @ 18 NONAME + _ZN23CSvgEngineInterfaceImpl11SetDocumentEP14CSvgEngineImplP16CSvgDocumentImpl @ 19 NONAME + _ZN23CSvgEngineInterfaceImpl11StartEngineEP14CSvgEngineImpl @ 20 NONAME + _ZN23CSvgEngineInterfaceImpl11SvgDocumentEv @ 21 NONAME + _ZN23CSvgEngineInterfaceImpl12CurrentStateEi @ 22 NONAME + _ZN23CSvgEngineInterfaceImpl12CustomOptionEii @ 23 NONAME + _ZN23CSvgEngineInterfaceImpl12GenerateMaskEP10CFbsBitmapi @ 24 NONAME + _ZN23CSvgEngineInterfaceImpl12IsRemoveableEP15CSvgElementImpli @ 25 NONAME + _ZN23CSvgEngineInterfaceImpl12OriginalViewEi @ 26 NONAME + _ZN23CSvgEngineInterfaceImpl12RenderFramesEiRK5TSizejjj12TDisplayModeS3_R13RPointerArrayI10CFbsBitmapES7_R6RArrayIjEi @ 27 NONAME + _ZN23CSvgEngineInterfaceImpl12SetMediaTimeEli @ 28 NONAME + _ZN23CSvgEngineInterfaceImpl12ViewportInitEP16CSvgDocumentImpl @ 29 NONAME + _ZN23CSvgEngineInterfaceImpl13DestroyEngineEP14CSvgEngineImpl @ 30 NONAME + _ZN23CSvgEngineInterfaceImpl13FillDocumentLEP16CSvgDocumentImplRK7TDesC16 @ 31 NONAME + _ZN23CSvgEngineInterfaceImpl13FocusPreviousEv @ 32 NONAME + _ZN23CSvgEngineInterfaceImpl13GetFirstChildEP15CXmlElementImpl @ 33 NONAME + _ZN23CSvgEngineInterfaceImpl13IsPanPossibleEiii @ 34 NONAME + _ZN23CSvgEngineInterfaceImpl13SearchForTextERK7TDesC16R13RPointerArrayI5MRectER6RArrayI7TPtrC16ERS7_IiEii @ 35 NONAME + _ZN23CSvgEngineInterfaceImpl13SvgCreatePathEv @ 36 NONAME + _ZN23CSvgEngineInterfaceImpl13SvgEngineNewLEv @ 37 NONAME + _ZN23CSvgEngineInterfaceImpl13WaitForImagesEii @ 38 NONAME + _ZN23CSvgEngineInterfaceImpl14CreateElementLEP16CSvgDocumentImpli @ 39 NONAME + _ZN23CSvgEngineInterfaceImpl14DestroyElementEP15CXmlElementImpl @ 40 NONAME + _ZN23CSvgEngineInterfaceImpl14GetElementByIdEP16CSvgDocumentImplRK7TDesC16 @ 41 NONAME + _ZN23CSvgEngineInterfaceImpl14GetElementTypeEP15CXmlElementImpl @ 42 NONAME + _ZN23CSvgEngineInterfaceImpl14GetNextSiblingEP15CXmlElementImpl @ 43 NONAME + _ZN23CSvgEngineInterfaceImpl14GetNumberOfIdsEP16CSvgDocumentImpl @ 44 NONAME + _ZN23CSvgEngineInterfaceImpl14GetRootElementEP16CSvgDocumentImpl @ 45 NONAME + _ZN23CSvgEngineInterfaceImpl14GetSegmentTypeEP15CGfxGeneralPathi @ 46 NONAME + _ZN23CSvgEngineInterfaceImpl14RemoveListenerEPK12MSvgListener16TSvgListenerTypei @ 47 NONAME + _ZN23CSvgEngineInterfaceImpl14SetFrameBufferEP10CFbsBitmapi @ 48 NONAME + _ZN23CSvgEngineInterfaceImpl14SetGdiContextLEP14CSvgEngineImplP10CFbsBitmap @ 49 NONAME + _ZN23CSvgEngineInterfaceImpl14SetNextSiblingEP15CXmlElementImplS1_ @ 50 NONAME + _ZN23CSvgEngineInterfaceImpl14SvgDestroyPathEP15CGfxGeneralPath @ 51 NONAME + _ZN23CSvgEngineInterfaceImpl15AddExternalDataEP16CSvgDocumentImplRK7TDesC16RK6TDesC8iii @ 52 NONAME + _ZN23CSvgEngineInterfaceImpl15AddTextListenerEP16MSvgTextListeneri @ 53 NONAME + _ZN23CSvgEngineInterfaceImpl15AssignImageDataERK7TDesC16P6HBufC8 @ 54 NONAME + _ZN23CSvgEngineInterfaceImpl15DestroyDocumentEP16CSvgDocumentImpl @ 55 NONAME + _ZN23CSvgEngineInterfaceImpl15FindAllElementsEP15CSvgElementImpliR13RPointerArrayIS0_Ei @ 56 NONAME + _ZN23CSvgEngineInterfaceImpl15FramesPerSecondEii @ 57 NONAME + _ZN23CSvgEngineInterfaceImpl15GetSegmentCountEP15CGfxGeneralPath @ 58 NONAME + _ZN23CSvgEngineInterfaceImpl15InitRootElementEP16CSvgDocumentImpl @ 59 NONAME + _ZN23CSvgEngineInterfaceImpl15IsElementActiveEP15CSvgElementImpl @ 60 NONAME + _ZN23CSvgEngineInterfaceImpl15SVGElementInDomEP16CSvgDocumentImplP15CXmlElementImpl @ 61 NONAME + _ZN23CSvgEngineInterfaceImpl15SetClientWindowEP7RWindow @ 62 NONAME + _ZN23CSvgEngineInterfaceImpl15SetFocusElementEP15CXmlElementImplP16CSvgDocumentImpl @ 63 NONAME + _ZN23CSvgEngineInterfaceImpl15SvgDocumentNewLEv @ 64 NONAME + _ZN23CSvgEngineInterfaceImpl15SvgEndElementAtEP15CXmlElementImplmP16CSvgDocumentImpl @ 65 NONAME + _ZN23CSvgEngineInterfaceImpl15SvgGetMediaTimeEP16CSvgDocumentImpl @ 66 NONAME + _ZN23CSvgEngineInterfaceImpl15SvgHasAnimationEP16CSvgDocumentImpl @ 67 NONAME + _ZN23CSvgEngineInterfaceImpl15SvgSetMediaTimeEP16CSvgDocumentImplm @ 68 NONAME + _ZN23CSvgEngineInterfaceImpl15SwitchDebugInfoEi @ 69 NONAME + _ZN23CSvgEngineInterfaceImpl16ClearFrameBufferEP10CFbsBitmapmi @ 70 NONAME + _ZN23CSvgEngineInterfaceImpl16GetEnumAttributeEP15CSvgElementImpliRl @ 71 NONAME + _ZN23CSvgEngineInterfaceImpl16GetOwnerDocumentEP15CXmlElementImpl @ 72 NONAME + _ZN23CSvgEngineInterfaceImpl16GetParentElementEP15CXmlElementImpl @ 73 NONAME + _ZN23CSvgEngineInterfaceImpl16GetPathAttributeEP15CXmlElementImpli @ 74 NONAME + _ZN23CSvgEngineInterfaceImpl16GetRectAttributeEP15CXmlElementImplPfS2_S2_S2_ @ 75 NONAME + _ZN23CSvgEngineInterfaceImpl16GetRenderQualityEv @ 76 NONAME + _ZN23CSvgEngineInterfaceImpl16GetViewportUnitsEP16CSvgDocumentImpl @ 77 NONAME + _ZN23CSvgEngineInterfaceImpl16GetViewportWidthEP16CSvgDocumentImpl @ 78 NONAME + _ZN23CSvgEngineInterfaceImpl16InitializeEngineEP14CSvgEngineImpli @ 79 NONAME + _ZN23CSvgEngineInterfaceImpl16IsElementVisibleEii @ 80 NONAME + _ZN23CSvgEngineInterfaceImpl16PrintAllElementsEP16CSvgDocumentImpl @ 81 NONAME + _ZN23CSvgEngineInterfaceImpl16SetEnumAttributeEP15CSvgElementImplil @ 82 NONAME + _ZN23CSvgEngineInterfaceImpl16SetParentElementEP15CXmlElementImplS1_ @ 83 NONAME + _ZN23CSvgEngineInterfaceImpl16SetPathAttributeEP15CSvgElementImpliP15CGfxGeneralPath @ 84 NONAME + _ZN23CSvgEngineInterfaceImpl16SetRectAttributeEP15CXmlElementImplffff @ 85 NONAME + _ZN23CSvgEngineInterfaceImpl16SetRenderQualityEji @ 86 NONAME + _ZN23CSvgEngineInterfaceImpl16SetThumbNailModeEii @ 87 NONAME + _ZN23CSvgEngineInterfaceImpl16SetViewportWidthEP16CSvgDocumentImpli @ 88 NONAME + _ZN23CSvgEngineInterfaceImpl17ContentDimensionsERfS0_i @ 89 NONAME + _ZN23CSvgEngineInterfaceImpl17ContentDimensionsEi @ 90 NONAME + _ZN23CSvgEngineInterfaceImpl17GetFocusedElementEP16CSvgDocumentImpl @ 91 NONAME + _ZN23CSvgEngineInterfaceImpl17GetSvgBoundingBoxEi @ 92 NONAME + _ZN23CSvgEngineInterfaceImpl17GetViewportHeightEP16CSvgDocumentImpl @ 93 NONAME + _ZN23CSvgEngineInterfaceImpl17SetViewportHeightEP16CSvgDocumentImpli @ 94 NONAME + _ZN23CSvgEngineInterfaceImpl17SvgBeginElementAtEP15CXmlElementImplmP16CSvgDocumentImpl @ 95 NONAME + _ZN23CSvgEngineInterfaceImpl18GetMatrixAttributeEP15CXmlElementImplPfS2_S2_S2_S2_S2_ @ 96 NONAME + _ZN23CSvgEngineInterfaceImpl18RemoveTextListenerEP16MSvgTextListeneri @ 97 NONAME + _ZN23CSvgEngineInterfaceImpl18SetBackgroundColorEmP14CSvgEngineImpl @ 98 NONAME + _ZN23CSvgEngineInterfaceImpl18SetMatrixAttributeEP15CXmlElementImplffffff @ 99 NONAME + _ZN23CSvgEngineInterfaceImpl18SetRequestObserverEP14CSvgEngineImplP19MSvgRequestObserver @ 100 NONAME + _ZN23CSvgEngineInterfaceImpl19AddTextAreaListenerEP20MSvgTextAreaListeneri @ 101 NONAME + _ZN23CSvgEngineInterfaceImpl19GetExternalListSizeEP16CSvgDocumentImpl @ 102 NONAME + _ZN23CSvgEngineInterfaceImpl19GetSegmentParameterEP15CGfxGeneralPathii @ 103 NONAME + _ZN23CSvgEngineInterfaceImpl19PrintElementsStylesEP15CSvgElementImpl @ 104 NONAME + _ZN23CSvgEngineInterfaceImpl20AddAnimationListenerEP21MSvgAnimationListeneri @ 105 NONAME + _ZN23CSvgEngineInterfaceImpl20AddHyperlinkListenerEP21MSvgHyperlinkListeneri @ 106 NONAME + _ZN23CSvgEngineInterfaceImpl20DispatchFocusInEventEP16CSvgDocumentImplP15CSvgElementImpl @ 107 NONAME + _ZN23CSvgEngineInterfaceImpl20GetExternalListItemLEP16CSvgDocumentImpliR7TPtrC16 @ 108 NONAME + _ZN23CSvgEngineInterfaceImpl20IsContentInteractiveEP16CSvgDocumentImpli @ 109 NONAME + _ZN23CSvgEngineInterfaceImpl20IsPanPossibleFourWayERiS0_S0_S0_i @ 110 NONAME + _ZN23CSvgEngineInterfaceImpl20SetAnimFrameDurationEji @ 111 NONAME + _ZN23CSvgEngineInterfaceImpl20SetFirstChildElementEP15CXmlElementImplS1_ @ 112 NONAME + _ZN23CSvgEngineInterfaceImpl20SvgActivateAnimationEP16CSvgDocumentImpl @ 113 NONAME + _ZN23CSvgEngineInterfaceImpl21ActivateObjectInFocusEv @ 114 NONAME + _ZN23CSvgEngineInterfaceImpl21ChooseViewBoxIfNotSetEi @ 115 NONAME + _ZN23CSvgEngineInterfaceImpl21DispatchFocusOutEventEP16CSvgDocumentImplP15CSvgElementImpl @ 116 NONAME + _ZN23CSvgEngineInterfaceImpl21DispatchMouseEventsAtEP16CSvgDocumentImpliiP17MSvgMouseListener @ 117 NONAME + _ZN23CSvgEngineInterfaceImpl21GetElementBoundingboxEP15CSvgElementImplRfS2_S2_S2_ @ 118 NONAME + _ZN23CSvgEngineInterfaceImpl21GetTextForTextElementEiRiR6TDes16 @ 119 NONAME + _ZN23CSvgEngineInterfaceImpl21SetTextForTextElementEiR7TDesC16 @ 120 NONAME + _ZN23CSvgEngineInterfaceImpl22AddToEventReceiverListEP15CXmlElementImplh @ 121 NONAME + _ZN23CSvgEngineInterfaceImpl22GetElementDesAttributeEP15CSvgElementImpliR7TPtrC16 @ 122 NONAME + _ZN23CSvgEngineInterfaceImpl22GetUnscaledContentSizeEi @ 123 NONAME + _ZN23CSvgEngineInterfaceImpl22RemoveTextAreaListenerEP20MSvgTextAreaListeneri @ 124 NONAME + _ZN23CSvgEngineInterfaceImpl22SetElementDesAttributeEP15CSvgElementImpliRK7TDesC16 @ 125 NONAME + _ZN23CSvgEngineInterfaceImpl22SetPreserveAspectRatioEP16CSvgDocumentImpl27TSvgPreserveAspectAlignType19TSvgMeetOrSliceTypei @ 126 NONAME + _ZN23CSvgEngineInterfaceImpl23RemoveAnimationListenerEP21MSvgAnimationListeneri @ 127 NONAME + _ZN23CSvgEngineInterfaceImpl23RemoveHyperlinkListenerEP21MSvgHyperlinkListeneri @ 128 NONAME + _ZN23CSvgEngineInterfaceImpl23SetDataRetrievalTimeOutEji @ 129 NONAME + _ZN23CSvgEngineInterfaceImpl24GetElementColorAttributeEP15CSvgElementImpli @ 130 NONAME + _ZN23CSvgEngineInterfaceImpl24GetElementFloatAttributeEP15CSvgElementImpli @ 131 NONAME + _ZN23CSvgEngineInterfaceImpl24SVGElementGetUsedElementEP15CXmlElementImpl @ 132 NONAME + _ZN23CSvgEngineInterfaceImpl24SetElementColorAttributeEP15CSvgElementImplil @ 133 NONAME + _ZN23CSvgEngineInterfaceImpl24SetElementFloatAttributeEP15CSvgElementImplif @ 134 NONAME + _ZN23CSvgEngineInterfaceImpl25GetTextForTextAreaElementEiRiR6TDes16 @ 135 NONAME + _ZN23CSvgEngineInterfaceImpl25SetTextForTextAreaElementEiR7TDesC16 @ 136 NONAME + _ZN23CSvgEngineInterfaceImpl27RemoveFromEventReceiverListEP15CXmlElementImpl @ 137 NONAME + _ZN23CSvgEngineInterfaceImpl28SetSvgDimensionToFrameBufferEjji @ 138 NONAME + _ZN23CSvgEngineInterfaceImpl29ContentDimensionsInPercentageEi @ 139 NONAME + _ZN23CSvgEngineInterfaceImpl29GetElementUnScaledBoundingBoxEP15CSvgElementImplRfS2_S2_S2_ @ 140 NONAME + _ZN23CSvgEngineInterfaceImpl30GetFourPointElementBoundingBoxEP19CSvgTextElementImplR6TPointS3_S3_S3_ @ 141 NONAME + _ZN23CSvgEngineInterfaceImpl31InitSvgStylePropertiesWithNullLEP15CSvgElementImpl @ 142 NONAME + _ZN23CSvgEngineInterfaceImpl3PanEiii @ 143 NONAME + _ZN23CSvgEngineInterfaceImpl4LoadER5RFile @ 144 NONAME + _ZN23CSvgEngineInterfaceImpl4LoadERK6TDesC8 @ 145 NONAME + _ZN23CSvgEngineInterfaceImpl4LoadERK7TDesC16 @ 146 NONAME + _ZN23CSvgEngineInterfaceImpl4NewLEP10CFbsBitmapP19MSvgRequestObserverR9TFontSpec @ 147 NONAME + _ZN23CSvgEngineInterfaceImpl4SizeEi @ 148 NONAME + _ZN23CSvgEngineInterfaceImpl4StopEP14CSvgEngineImpl @ 149 NONAME + _ZN23CSvgEngineInterfaceImpl4ZoomEfi @ 150 NONAME + _ZN23CSvgEngineInterfaceImpl5GetIdEP16CSvgDocumentImpli @ 151 NONAME + _ZN23CSvgEngineInterfaceImpl5NewLCEP10CFbsBitmapP19MSvgRequestObserverR9TFontSpec @ 152 NONAME + _ZN23CSvgEngineInterfaceImpl5PauseEP14CSvgEngineImpl @ 153 NONAME + _ZN23CSvgEngineInterfaceImpl5StartEP14CSvgEngineImpli @ 154 NONAME + _ZN23CSvgEngineInterfaceImpl6RedrawEii @ 155 NONAME + _ZN23CSvgEngineInterfaceImpl6ReplayEi @ 156 NONAME + _ZN23CSvgEngineInterfaceImpl6ResumeEP14CSvgEngineImpl @ 157 NONAME + _ZN23CSvgEngineInterfaceImpl6RotateEfiii @ 158 NONAME + _ZN23CSvgEngineInterfaceImpl6UseDomEiP10CFbsBitmapS1_i @ 159 NONAME + _ZN23CSvgEngineInterfaceImpl7DestroyEv @ 160 NONAME + _ZN23CSvgEngineInterfaceImpl7DrawBoxE5TRecti @ 161 NONAME + _ZN23CSvgEngineInterfaceImpl7MouseUpEiii @ 162 NONAME + _ZN23CSvgEngineInterfaceImpl7SaveSvgEiRK7TDesC16i @ 163 NONAME + _ZN23CSvgEngineInterfaceImpl8DurationEi @ 164 NONAME + _ZN23CSvgEngineInterfaceImpl8KeyPressERK9TKeyEventi @ 165 NONAME + _ZN23CSvgEngineInterfaceImpl8PositionEi @ 166 NONAME + _ZN23CSvgEngineInterfaceImpl9ADDLineToEP15CGfxGeneralPathff @ 167 NONAME + _ZN23CSvgEngineInterfaceImpl9ADDMoveToEP15CGfxGeneralPathff @ 168 NONAME + _ZN23CSvgEngineInterfaceImpl9ADDQuadToEP15CGfxGeneralPathffff @ 169 NONAME + _ZN23CSvgEngineInterfaceImpl9DeleteDomEi @ 170 NONAME + _ZN23CSvgEngineInterfaceImpl9FocusNextEv @ 171 NONAME + _ZN23CSvgEngineInterfaceImpl9IsLoadingEi @ 172 NONAME + _ZN23CSvgEngineInterfaceImpl9MediaTimeEi @ 173 NONAME + _ZN23CSvgEngineInterfaceImpl9MouseDownEiii @ 174 NONAME + _ZN23CSvgEngineInterfaceImpl9MouseMoveEiii @ 175 NONAME + _ZN23CSvgEngineInterfaceImpl9RenderDomEiP10CFbsBitmapS1_ @ 176 NONAME + _ZN23CSvgEngineInterfaceImplC1Ev @ 177 NONAME + _ZN23CSvgEngineInterfaceImplC2Ev @ 178 NONAME + _ZN23CSvgEngineInterfaceImplD0Ev @ 179 NONAME + _ZN23CSvgEngineInterfaceImplD1Ev @ 180 NONAME + _ZN23CSvgEngineInterfaceImplD2Ev @ 181 NONAME + _ZTI10TGfxLine2D @ 182 NONAME ; ## + _ZTI11CGfx2dGcVGR @ 183 NONAME ; ## + _ZTI11CSvgDecoder @ 184 NONAME ; ## + _ZTI13CSvgErrorImpl @ 185 NONAME ; ## + _ZTI13CSvgTestsImpl @ 186 NONAME ; ## + _ZTI13TGfxEllipse2D @ 187 NONAME ; ## + _ZTI14CGfx2dGcOpenVG @ 188 NONAME ; ## + _ZTI14CSvgEngineImpl @ 189 NONAME ; ## + _ZTI14CSvgSchemaData @ 190 NONAME ; ## + _ZTI14TSvgTimerEvent @ 191 NONAME ; ## + _ZTI14TSvgUiKeyEvent @ 192 NONAME ; ## + _ZTI15CGfxGeneralPath @ 193 NONAME ; ## + _ZTI15CSvgElementImpl @ 194 NONAME ; ## + _ZTI15CSvgFontHashMap @ 195 NONAME ; ## + _ZTI15CSvgFontMapItem @ 196 NONAME ; ## + _ZTI15CXmlElementImpl @ 197 NONAME ; ## + _ZTI15TGfxRectangle2D @ 198 NONAME ; ## + _ZTI16CClrCssValueImpl @ 199 NONAME ; ## + _ZTI16CIntCssValueImpl @ 200 NONAME ; ## + _ZTI16CStrCssValueImpl @ 201 NONAME ; ## + _ZTI16CSvgAElementImpl @ 202 NONAME ; ## + _ZTI16CSvgDocumentImpl @ 203 NONAME ; ## + _ZTI16CSvgEventHandler @ 204 NONAME ; ## + _ZTI16CSvgGElementImpl @ 205 NONAME ; ## + _ZTI16CSvgImageHashMap @ 206 NONAME ; ## + _ZTI16CSvgImageMapItem @ 207 NONAME ; ## + _ZTI16TSvgUiMouseEvent @ 208 NONAME ; ## + _ZTI17CGfxLineIteratorP @ 209 NONAME ; ## + _ZTI17CSvgAnimationBase @ 210 NONAME ; ## + _ZTI17CSvgLangSpaceImpl @ 211 NONAME ; ## + _ZTI17CSvgMemoryManager @ 212 NONAME ; ## + _ZTI17TGfxGradientPaint @ 213 NONAME ; ## + _ZTI17TSvgFourPointRect @ 214 NONAME ; ## + _ZTI17TSvgInternalEvent @ 215 NONAME ; ## + _ZTI18CFloatCssValueImpl @ 216 NONAME ; ## + _ZTI18CPaintCssValueImpl @ 217 NONAME ; ## + _ZTI18CSvgContentHandler @ 218 NONAME ; ## + _ZTI18CSvgSetElementImpl @ 219 NONAME ; ## + _ZTI18CSvgSvgElementImpl @ 220 NONAME ; ## + _ZTI18CSvgUseElementImpl @ 221 NONAME ; ## + _ZTI18TSvgTimerEventPrep @ 222 NONAME ; ## + _ZTI19CSvgDefsElementImpl @ 223 NONAME ; ## + _ZTI19CSvgDescElementImpl @ 224 NONAME ; ## + _ZTI19CSvgEventAttributes @ 225 NONAME ; ## + _ZTI19CSvgFontElementImpl @ 226 NONAME ; ## + _ZTI19CSvgLineElementImpl @ 227 NONAME ; ## + _ZTI19CSvgPathElementImpl @ 228 NONAME ; ## + _ZTI19CSvgRectElementImpl @ 229 NONAME ; ## + _ZTI19CSvgStopElementImpl @ 230 NONAME ; ## + _ZTI19CSvgTextElementImpl @ 231 NONAME ; ## + _ZTI19CVectorCssValueImpl @ 232 NONAME ; ## + _ZTI20CGfxEllipseIteratorP @ 233 NONAME ; ## + _ZTI20CSvgAnimTimingParser @ 234 NONAME ; ## + _ZTI20CSvgFitToViewBoxImpl @ 235 NONAME ; ## + _ZTI20CSvgGlyphElementImpl @ 236 NONAME ; ## + _ZTI20CSvgHkernElementImpl @ 237 NONAME ; ## + _ZTI20CSvgImageElementImpl @ 238 NONAME ; ## + _ZTI20CSvgMpathElementImpl @ 239 NONAME ; ## + _ZTI20CSvgStyleElementImpl @ 240 NONAME ; ## + _ZTI20CSvgTitleElementImpl @ 241 NONAME ; ## + _ZTI20CSvgUriReferenceImpl @ 242 NONAME ; ## + _ZTI20TGfxRectangularShape @ 243 NONAME ; ## + _ZTI20TGfxRoundRectangle2D @ 244 NONAME ; ## + _ZTI21CSvgCircleElementImpl @ 245 NONAME ; ## + _ZTI21CSvgScriptElementImpl @ 246 NONAME ; ## + _ZTI21CSvgTransformListImpl @ 247 NONAME ; ## + _ZTI21CSvgTransformableImpl @ 248 NONAME ; ## + _ZTI21TSvgScreenUpdateEvent @ 249 NONAME ; ## + _ZTI22CGfxRectangleIteratorP @ 250 NONAME ; ## + _ZTI22CSvgAnimTimeController @ 251 NONAME ; ## + _ZTI22CSvgAnimateElementImpl @ 252 NONAME ; ## + _ZTI22CSvgDiscardElementImpl @ 253 NONAME ; ## + _ZTI22CSvgEllipseElementImpl @ 254 NONAME ; ## + _ZTI23CSvgEngineInterfaceImpl @ 255 NONAME ; ## + _ZTI23CSvgFontFaceElementImpl @ 256 NONAME ; ## + _ZTI23CSvgGradientElementImpl @ 257 NONAME ; ## + _ZTI23CSvgMetadataElementImpl @ 258 NONAME ; ## + _ZTI23CSvgPolylineElementImpl @ 259 NONAME ; ## + _ZTI23CSvgTextAreaElementImpl @ 260 NONAME ; ## + _ZTI23TGfxLinearGradientPaint @ 261 NONAME ; ## + _ZTI23TGfxRadialGradientPaint @ 262 NONAME ; ## + _ZTI24CGfxGeneralPathIteratorP @ 263 NONAME ; ## + _ZTI24CSvgAnimationElementImpl @ 264 NONAME ; ## + _ZTI25CSvgDOMImplementationImpl @ 265 NONAME ; ## + _ZTI25CSvgSolidColorElementImpl @ 266 NONAME ; ## + _ZTI26CGfxFlatteningPathIterator @ 267 NONAME ; ## + _ZTI27CGfxRoundRectangleIteratorP @ 268 NONAME ; ## + _ZTI27CSvgMissingGlyphElementImpl @ 269 NONAME ; ## + _ZTI27CSvgPreserveAspectRatioImpl @ 270 NONAME ; ## + _ZTI28CSvgAnimateMotionElementImpl @ 271 NONAME ; ## + _ZTI28CSvgForeignObjectElementImpl @ 272 NONAME ; ## + _ZTI29CSvgLinearGradientElementImpl @ 273 NONAME ; ## + _ZTI29CSvgRadialGradientElementImpl @ 274 NONAME ; ## + _ZTI31CSvgAnimateTransformElementImpl @ 275 NONAME ; ## + _ZTI9CSvgTimer @ 276 NONAME ; ## + _ZTI9TGfxColor @ 277 NONAME ; ## + _ZTIN20CSvgImageElementImpl19CSvgImageLoaderUtilE @ 278 NONAME ; ## + _ZTV10TGfxLine2D @ 279 NONAME ; ## + _ZTV11CGfx2dGcVGR @ 280 NONAME ; ## + _ZTV11CSvgDecoder @ 281 NONAME ; ## + _ZTV13CSvgErrorImpl @ 282 NONAME ; ## + _ZTV13CSvgTestsImpl @ 283 NONAME ; ## + _ZTV13TGfxEllipse2D @ 284 NONAME ; ## + _ZTV14CGfx2dGcOpenVG @ 285 NONAME ; ## + _ZTV14CSvgEngineImpl @ 286 NONAME ; ## + _ZTV14CSvgSchemaData @ 287 NONAME ; ## + _ZTV14TSvgTimerEvent @ 288 NONAME ; ## + _ZTV14TSvgUiKeyEvent @ 289 NONAME ; ## + _ZTV15CGfxGeneralPath @ 290 NONAME ; ## + _ZTV15CSvgElementImpl @ 291 NONAME ; ## + _ZTV15CSvgFontHashMap @ 292 NONAME ; ## + _ZTV15CSvgFontMapItem @ 293 NONAME ; ## + _ZTV15CXmlElementImpl @ 294 NONAME ; ## + _ZTV15TGfxRectangle2D @ 295 NONAME ; ## + _ZTV16CClrCssValueImpl @ 296 NONAME ; ## + _ZTV16CIntCssValueImpl @ 297 NONAME ; ## + _ZTV16CStrCssValueImpl @ 298 NONAME ; ## + _ZTV16CSvgAElementImpl @ 299 NONAME ; ## + _ZTV16CSvgDocumentImpl @ 300 NONAME ; ## + _ZTV16CSvgEventHandler @ 301 NONAME ; ## + _ZTV16CSvgGElementImpl @ 302 NONAME ; ## + _ZTV16CSvgImageHashMap @ 303 NONAME ; ## + _ZTV16CSvgImageMapItem @ 304 NONAME ; ## + _ZTV16TSvgUiMouseEvent @ 305 NONAME ; ## + _ZTV17CGfxLineIteratorP @ 306 NONAME ; ## + _ZTV17CSvgAnimationBase @ 307 NONAME ; ## + _ZTV17CSvgLangSpaceImpl @ 308 NONAME ; ## + _ZTV17CSvgMemoryManager @ 309 NONAME ; ## + _ZTV17TGfxGradientPaint @ 310 NONAME ; ## + _ZTV17TSvgFourPointRect @ 311 NONAME ; ## + _ZTV17TSvgInternalEvent @ 312 NONAME ; ## + _ZTV18CFloatCssValueImpl @ 313 NONAME ; ## + _ZTV18CPaintCssValueImpl @ 314 NONAME ; ## + _ZTV18CSvgContentHandler @ 315 NONAME ; ## + _ZTV18CSvgSetElementImpl @ 316 NONAME ; ## + _ZTV18CSvgSvgElementImpl @ 317 NONAME ; ## + _ZTV18CSvgUseElementImpl @ 318 NONAME ; ## + _ZTV18TSvgTimerEventPrep @ 319 NONAME ; ## + _ZTV19CSvgDefsElementImpl @ 320 NONAME ; ## + _ZTV19CSvgDescElementImpl @ 321 NONAME ; ## + _ZTV19CSvgEventAttributes @ 322 NONAME ; ## + _ZTV19CSvgFontElementImpl @ 323 NONAME ; ## + _ZTV19CSvgLineElementImpl @ 324 NONAME ; ## + _ZTV19CSvgPathElementImpl @ 325 NONAME ; ## + _ZTV19CSvgRectElementImpl @ 326 NONAME ; ## + _ZTV19CSvgStopElementImpl @ 327 NONAME ; ## + _ZTV19CSvgTextElementImpl @ 328 NONAME ; ## + _ZTV19CVectorCssValueImpl @ 329 NONAME ; ## + _ZTV20CGfxEllipseIteratorP @ 330 NONAME ; ## + _ZTV20CSvgAnimTimingParser @ 331 NONAME ; ## + _ZTV20CSvgFitToViewBoxImpl @ 332 NONAME ; ## + _ZTV20CSvgGlyphElementImpl @ 333 NONAME ; ## + _ZTV20CSvgHkernElementImpl @ 334 NONAME ; ## + _ZTV20CSvgImageElementImpl @ 335 NONAME ; ## + _ZTV20CSvgMpathElementImpl @ 336 NONAME ; ## + _ZTV20CSvgStyleElementImpl @ 337 NONAME ; ## + _ZTV20CSvgTitleElementImpl @ 338 NONAME ; ## + _ZTV20CSvgUriReferenceImpl @ 339 NONAME ; ## + _ZTV20TGfxRectangularShape @ 340 NONAME ; ## + _ZTV20TGfxRoundRectangle2D @ 341 NONAME ; ## + _ZTV21CSvgCircleElementImpl @ 342 NONAME ; ## + _ZTV21CSvgScriptElementImpl @ 343 NONAME ; ## + _ZTV21CSvgTransformListImpl @ 344 NONAME ; ## + _ZTV21CSvgTransformableImpl @ 345 NONAME ; ## + _ZTV21TSvgScreenUpdateEvent @ 346 NONAME ; ## + _ZTV22CGfxRectangleIteratorP @ 347 NONAME ; ## + _ZTV22CSvgAnimTimeController @ 348 NONAME ; ## + _ZTV22CSvgAnimateElementImpl @ 349 NONAME ; ## + _ZTV22CSvgDiscardElementImpl @ 350 NONAME ; ## + _ZTV22CSvgEllipseElementImpl @ 351 NONAME ; ## + _ZTV23CSvgEngineInterfaceImpl @ 352 NONAME ; ## + _ZTV23CSvgFontFaceElementImpl @ 353 NONAME ; ## + _ZTV23CSvgGradientElementImpl @ 354 NONAME ; ## + _ZTV23CSvgMetadataElementImpl @ 355 NONAME ; ## + _ZTV23CSvgPolylineElementImpl @ 356 NONAME ; ## + _ZTV23CSvgTextAreaElementImpl @ 357 NONAME ; ## + _ZTV23TGfxLinearGradientPaint @ 358 NONAME ; ## + _ZTV23TGfxRadialGradientPaint @ 359 NONAME ; ## + _ZTV24CGfxGeneralPathIteratorP @ 360 NONAME ; ## + _ZTV24CSvgAnimationElementImpl @ 361 NONAME ; ## + _ZTV25CSvgDOMImplementationImpl @ 362 NONAME ; ## + _ZTV25CSvgSolidColorElementImpl @ 363 NONAME ; ## + _ZTV26CGfxFlatteningPathIterator @ 364 NONAME ; ## + _ZTV27CGfxRoundRectangleIteratorP @ 365 NONAME ; ## + _ZTV27CSvgMissingGlyphElementImpl @ 366 NONAME ; ## + _ZTV27CSvgPreserveAspectRatioImpl @ 367 NONAME ; ## + _ZTV28CSvgAnimateMotionElementImpl @ 368 NONAME ; ## + _ZTV28CSvgForeignObjectElementImpl @ 369 NONAME ; ## + _ZTV29CSvgLinearGradientElementImpl @ 370 NONAME ; ## + _ZTV29CSvgRadialGradientElementImpl @ 371 NONAME ; ## + _ZTV31CSvgAnimateTransformElementImpl @ 372 NONAME ; ## + _ZTV9CSvgTimer @ 373 NONAME ; ## + _ZTV9TGfxColor @ 374 NONAME ; ## + _ZTVN20CSvgImageElementImpl19CSvgImageLoaderUtilE @ 375 NONAME ; ## + _ZN23CSvgEngineInterfaceImpl5StartERP9MSvgErrorP14CSvgEngineImpl @ 376 NONAME + _ZN23CSvgEngineInterfaceImpl12SetDRMRightsEi @ 377 NONAME + _ZN23CSvgEngineInterfaceImpl14SetAudioVolumeEii @ 378 NONAME + _ZN23CSvgEngineInterfaceImpl15MuteAudioVolumeEi @ 379 NONAME + _ZN23CSvgEngineInterfaceImpl18GetMatrixAttributeEP15CXmlElementImpliPfS2_S2_S2_S2_S2_ @ 380 NONAME + _ZN23CSvgEngineInterfaceImpl10ConstructLER9TFontSpec @ 381 NONAME + _ZN23CSvgEngineInterfaceImpl12ResetContextEi @ 382 NONAME + _ZN23CSvgEngineInterfaceImpl10ConstructLEP10CFbsBitmapP19MSvgRequestObserverR9TFontSpec13SVGRendererId @ 383 NONAME + _ZN23CSvgEngineInterfaceImpl4NewLEP10CFbsBitmapP19MSvgRequestObserverR9TFontSpec13SVGRendererId @ 384 NONAME + _ZN23CSvgEngineInterfaceImpl5NewLCEP10CFbsBitmapP19MSvgRequestObserverR9TFontSpec13SVGRendererId @ 385 NONAME + _ZN23CSvgEngineInterfaceImpl5StartEPK6TDesC8P14CSvgEngineImpli @ 386 NONAME + _ZN23CSvgEngineInterfaceImpl5StartERP9MSvgErrorPK6TDesC8P14CSvgEngineImpl @ 387 NONAME + _ZN23CSvgEngineInterfaceImpl6UseDomEiP10CFbsBitmapS1_5TSize12TDisplayModeS3_i @ 388 NONAME + _ZNK23CSvgEngineInterfaceImpl14TLVEncodedDataEv @ 389 NONAME + diff -r 000000000000 -r d46562c3d99d svgtopt/SVG/SVGEngine/group/SVGEngine.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVG/SVGEngine/group/SVGEngine.mmp Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,285 @@ +/* +* Copyright (c) 2002 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: This mmp file generates makefile for SVG Engine +* +*/ + + +#include + +ALWAYS_BUILD_AS_ARM +OPTION_REPLACE ARMCC --cpu 5T -O3 -Otime +TARGET SVGEngine.dll +TARGETTYPE dll + + +VENDORID VID_DEFAULT + +UID 0x1000008D 0x101F856E + + + #if defined( ARMCC ) + deffile ../eabi/SVGENGINE-OpenVG.def + #elif defined( WINSCW ) + deffile ../BWINSCW/SVGENGINE-OpenVG.def + #elif defined( WINS ) + deffile ../bwins/SVGENGINE-OpenVG.def + #else + deffile ../bmarm/SVGENGINE-OpenVG.def + #endif + +CAPABILITY CAP_GENERAL_DLL DRM + +SOURCEPATH ../src + +//SOURCE SVGEngineMain.cpp +SOURCE SVGEngineImpl.cpp +SOURCE SVGEngineInterfaceImpl.cpp +SOURCE SVGTimer.cpp +SOURCE SVGEventHandler.cpp +SOURCE SVGEvent.cpp +SOURCE SVGContentHandler.cpp +SOURCE SvgBitmapFontProvider.cpp +//SOURCE SVGXmlParser.cpp +SOURCE SVGAttributeVerifier.cpp +SOURCE SVGErrorImpl.cpp +SOURCE Svgdecoder.cpp +SOURCE SVGFourPointRect.cpp + +SOURCEPATH ../../SVGImpl/src + +SOURCE SVGElementImpl.cpp +SOURCE SVGDocumentImpl.cpp +SOURCE SVGDOMImplementationImpl.cpp + +// Structure Elements +SOURCE Svgsvgelementimpl.cpp +SOURCE SVGGElementImpl.cpp +SOURCE SVGUseElementImpl.cpp +SOURCE SVGStyleElementImpl.cpp +SOURCE SVGForeignObjectElementImpl.cpp +SOURCE SVGTitleElementImpl.cpp +SOURCE SVGMetadataElementImpl.cpp +SOURCE SVGDefsElementImpl.cpp +SOURCE SVGDescElementImpl.cpp + +// Hyper linking +SOURCE SVGAElementImpl.cpp +SOURCE SVGUriReferenceImpl.cpp + +// Basic Shape Elements +SOURCE SVGLineElementImpl.cpp +SOURCE SVGRectElementImpl.cpp +SOURCE SVGCircleElementImpl.cpp +SOURCE SVGEllipseElementImpl.cpp +SOURCE SVGPolylineElementImpl.cpp +SOURCE SVGPathElementImpl.cpp +SOURCE SVGMpathElementImpl.cpp + +// Text and Image Elements +SOURCE SVGTextElementImpl.cpp +SOURCE SVGTextAreaElementImpl.cpp +SOURCE SVGImageElementImpl.cpp + +//Font Elements +SOURCE SVGFontElementImpl.cpp +SOURCE SVGFontFaceElementImpl.cpp +SOURCE SVGGlyphElementImpl.cpp +SOURCE SVGMissingGlyphElementImpl.cpp +SOURCE SvgHkernelementimpl.cpp + +// Animation Elements +SOURCE SVGAnimationBase.cpp +SOURCE SVGSetElementImpl.cpp +SOURCE SVGAnimateElementImpl.cpp +SOURCE SVGAnimateTransformElementImpl.cpp +SOURCE SVGAnimateMotionElementImpl.cpp +SOURCE SVGDiscardElementImpl.cpp +SOURCE SVGAnimationElementImpl.cpp + +// Gradient Elements +SOURCE SVGLinearGradientElementImpl.cpp +SOURCE SVGGradientElementImpl.cpp +SOURCE SVGRadialGradientElementImpl.cpp +SOURCE SVGStopElementImpl.cpp + +SOURCE SVGSolidColorElementImpl.cpp +SOURCE SVGScriptElementImpl.cpp + +// CSS Classes +SOURCE SVGClrCssValueImpl.cpp +SOURCE SVGPaintCssValueImpl.cpp +SOURCE SVGIntCssValueImpl.cpp +SOURCE SVGFloatCssValueImpl.cpp +SOURCE SVGStrCssValueImpl.cpp +SOURCE SVGVectorCssValueImpl.cpp +//SOURCE SVGCssStyleDeclarationImpl.cpp +SOURCE SVGEventAttributes.cpp + +// Transform Classes +SOURCE SVGTransformListImpl.cpp +SOURCE SVGTransformableImpl.cpp + +// Switch Related Classes +SOURCE SVGTestsImpl.cpp + +// XML Language Space Class +SOURCE SVGLangSpaceImpl.cpp + +// Viewbox Classes +SOURCE SVGFitToViewBoxImpl.cpp +SOURCE SVGPreserveAspectRatioImpl.cpp + +// Utility Classes +SOURCE SVGPointLexer.cpp +SOURCE SVGSchemaData.cpp +SOURCE SVGPathDataParser.cpp +SOURCE SVGAnimTimeController.cpp +SOURCE SVGStringTokenizer.cpp +SOURCE SVGRelToAbsPath.cpp +SOURCE SVGAnimTimingParser.cpp +SOURCE SVGImageHashMap.cpp +SOURCE SVGFontHashMap.cpp +SOURCE SVGMemoryManager.cpp +SOURCE SVGColor.cpp +SOURCE SVGTokenizer.cpp + +// Media Element Classes +SOURCE SVGAudioElementImpl.cpp +SOURCE SVGMediaAnimationElementImpl.cpp +SOURCE SVGMediaElementBase.cpp +SOURCE SVGTimeContainer.cpp +SOURCE SVGLockedRealTimeEntity.cpp + +SOURCEPATH ../../Xmldomimpl/src + +SOURCE SVGXmlElementImpl.cpp + + +USERINCLUDE ../inc +USERINCLUDE ../../Xmldomimpl/inc +USERINCLUDE ../../SVGImpl/inc/SVGDOM +USERINCLUDE ../../SVGImpl/inc +USERINCLUDE ../../../VGRenderer/inc + +// This is a SYSTEMINCLUDE macro containing the middleware +// layer specific include directories +MW_LAYER_SYSTEMINCLUDE + +SYSTEMINCLUDE /epoc32/include/libc + +APP_LAYER_SYSTEMINCLUDE + +LIBRARY cone.lib +LIBRARY euser.lib +LIBRARY bafl.lib +LIBRARY efsrv.lib +LIBRARY fbscli.lib +LIBRARY estor.lib +LIBRARY gdi.lib + +// Library for image converter utilities +//LIBRARY MediaClientImage.lib +LIBRARY ImageConversion.lib + +// Library for XML Parser utilities +LIBRARY XMLINTERFACE.lib + + +// CXML parser +//LIBRARY CXMLParser.lib +// For CnvUtfConverter class +LIBRARY charconv.lib + +//#include +//#if !defined(__DRM_FULL) + +//LIBRARY DrmParsers.lib DrmDcf.lib DrmRights.lib DrmServerInterfaces.lib +//LIBRARY DRMCommon.lib + +LIBRARY estlib.lib +//#endif + +// Base64 Encoding +LIBRARY imut.lib + +// GZip library +LIBRARY EZLib.lib + +// CAF library: for DRM +LIBRARY caf.lib + +LIBRARY mediaclientaudio.lib +// Added for localized bidirectional textArea wrapping support +LIBRARY avkon.lib + +//-------------------------------------------- +// Graphics library Information-------- +//LIBRARY Gfx2D.lib +//-------------------------------------------- +SOURCEPATH ../../../gfx2d/src +SOURCE GfxMath.c +SOURCE GfxFloatFixPt.cpp +SOURCE Gfxtrignometric.cpp +/* this file is needed for ADS, RVCT, or GCC builds (mem operation wrappers) */ +SOURCE RastSymbianWrapper.cpp + +// GFXGC source files +SOURCEPATH ../../../gfx2d/src/GfxGc +SOURCE GfxStroke.cpp +SOURCE GfxColor.cpp +SOURCE GfxRenderingHints.cpp +SOURCE GfxGradientPaint.cpp +SOURCE Gfx2dGcOpenVG.cpp +SOURCE Gfx2dGc.cpp + + +// GFXGEOM source files +SOURCEPATH ../../../gfx2d/src/GfxGeom +SOURCE GfxEllipse2D.cpp +SOURCE GfxEllipseIteratorP.cpp +SOURCE GfxFlatteningPathIterator.cpp +SOURCE GfxGeneralPath.cpp +SOURCE GfxGeneralPathIteratorP.cpp +SOURCE GfxRectangle2D.cpp +SOURCE GfxRectangleIteratorP.cpp +SOURCE GfxRectangularShape.cpp +SOURCE GfxRoundRectangle2D.cpp +SOURCE GfxRoundRectangleIteratorP.cpp +SOURCE GfxLine2D.cpp +SOURCE GfxLineIteratorP.cpp +SOURCE GfxAffineTransform.cpp +SOURCE GfxPoint2D.cpp + +// GFXIMAGE source files +SOURCEPATH ../../../gfx2d/src/GfxImage +SOURCE GfxImageTransformer.cpp + +// Internal Rendering Engine source files +SOURCEPATH ../../../gfx2d/src/GfxRenderer +SOURCE GfxRendererInfoP.cpp + + +USERINCLUDE ../../../gfx2d/inc + + +LIBRARY VGRenderer.lib + + +LIBRARY eikcore.lib +LIBRARY bitgdi.lib +LIBRARY hal.lib +//-------------------------------------------- +// End of Graphics library Information-------- +//-------------------------------------------- diff -r 000000000000 -r d46562c3d99d svgtopt/SVG/SVGEngine/group/SVGEngineS90.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVG/SVGEngine/group/SVGEngineS90.iby Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2004 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: IBY file for SVGT Engine +* +*/ + + +#ifndef SVGTENGINE_IBY +#define SVGTENGINE_IBY + +file=ABI_DIR\BUILD_DIR\SVGEngine.dll System\Libs\SVGEngine.dll +file=ABI_DIR\BUILD_DIR\Svgrecog.mdl System\recogs\Svgrecog.mdl + +#endif +// End of File diff -r 000000000000 -r d46562c3d99d svgtopt/SVG/SVGEngine/inc/SVGAttributeVerifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVG/SVGEngine/inc/SVGAttributeVerifier.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2003 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: SVG Implementation header file + * +*/ + + +#ifndef _INC_CSVGATTRIBUTEVERIFIER_ +#define _INC_CSVGATTRIBUTEVERIFIER_ + +#if !defined(__E32BASE_H__) +#include +#endif + + +#include + +#define KSVG_COORDINATE_TYPE 2 +#define KSVG_LENGTH_TYPE 1 +const TInt KMax16BitValue = 32765; + +/** + * This class provides methods to verify attributes values, to reorder + * the attributes and to check for required attributes for specific elements, + * + * @lib SVGEngine.lib + * @since 1.0 + */ +class CSvgAttributeVerifier : public CBase +{ + public: + + + /** + * Parse the given string for a decimal value. + * + * @since 1.0 + * @param aNumberString : decimal value string + * @param aValueStorage : value storage + * @return ETrue if string is a valid decimal value. + */ + static TBool ParseForDecimalValue( const TDesC& aNum2Str, TReal32& aValue, const TDesC& aAttrValue, TBool isSvgElement ); + + /** + * Verify the range of the value of an attribute based on its type + * The string value is converted into the required type and passed back to + * the calling function + * @since 1.0 + * @param aValues : value of the attribute + * @param aConvVal : reference parameter to return the converted value + * @param aDatatype : flag to determine the type of datatype + * @return ETrue if string is a valid decimal value and lies in a valid range. + */ + + static TBool ValidAttrValue ( + const TDesC& aValue, + TReal32& aConvVal, + TUint8 aDatatype, + const TDesC& aAttrValue, + TBool isSvgElement + ); +}; + +#endif diff -r 000000000000 -r d46562c3d99d svgtopt/SVG/SVGEngine/inc/SVGContentHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVG/SVGEngine/inc/SVGContentHandler.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,563 @@ +/* +* Copyright (c) 2003 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: SVG Engine header file + * +*/ + + +#ifndef CSVGCONTENTHANDLER_H +#define CSVGCONTENTHANDLER_H + + +#include +#include + +#include "GfxColor.h" +#include "SVGEngineInterfaceImpl.h" +#include "SVGAttributeVerifier.h" +#include "SVGErrorImpl.h" + +#include "MXMLAttributes.h" +#include "MXMLContentHandler.h" + +#include "SVGSchemaData.h" +#include "SVGDocumentImpl.h" + +/** + * SMIL2 parser class + */ +class CSvgElementImpl; +class CSvgScriptElementImpl; +class CSvgImageElementImpl; + + +/** + * Class description goes here. + * + * @lib SVGEngine.lib + * @since 1.0 + */ +class CSvgContentHandler : public CBase, public MXMLContentHandler + { + public: + /** + * Parser phase one constructor + * + * Takes the player interface object as a parameter. This interface + * is used by the parser for reporting parse errors and for getting values + * of the content control attributes. It is also passed to the created + * presentation object. + */ + + /** + * Two phase constructor + * + * @since 1.0 + * @param None + * @return An isntance of this class + */ + static CSvgContentHandler* NewL( TBool aRemoveFalseSwitchElements = ETrue ); + + /** + * Two phase constructor + * + * @since 1.0 + * @param None + * @return An instance of this class + */ + static CSvgContentHandler* NewLC(); + + + /** + * Part of two phase construction + * + * @since 1.0 + * @param None + * @return None + */ + virtual void ConstructL( TBool aRemoveFalseSwitchElements = ETrue ); + + /** + * Destructor. + */ + + /** + * Destructor + * + * @since 1.0 + * @param None + * @return None + */ + virtual ~CSvgContentHandler(); + + + + + /** + * + * Parses the given encrypted SVG source, constructing the presentation objects. + * This is a variant of ParseL and processes encrypted SVG sources. + * + * @since 1.0 + * @param aDocument - The document object to which this document is constructed + * @param aSvgFileName - The URI to the encrypted SVG source + * @param aSuccess - An error code that signals successful/unsuccessful parsing + * @return Instance of the root element of the SVG document. + */ + CSvgElementImpl* ParseByteData( CSvgDocumentImpl* aDocument, + const TDesC8& aByteData, + CSvgErrorImpl& aError ); + + /* + * Parse the given 16 bit string of SVG + * This method is used primarily for JSR226 to avoid conversion of strings + * + */ + CSvgElementImpl* Parse16BitData( CSvgDocumentImpl* aDocument, + const TDesC16& aSvgString, + CSvgErrorImpl& aError ); + + + + CSvgElementImpl* ParseFile( CSvgDocumentImpl* aDocument, + const TDesC& aFileName, + CSvgErrorImpl& aError ); + /*************** MXMLContentHandler interface methods **************/ + + /** + * A callback that signals start of a document + * + * @since 1.0 + * @param + * @return A value that indicates success/failure + */ + TInt StartDocument(); + + /** + * A callback that signals end of a document + * + * @since 1.0 + * @param + * @return A value that indicates success/failure + */ + TInt EndDocument(); + + /** + * Returns reader index + * @since Series60 3.1 + * @param aIndex - reader index + */ + void ReaderIndex(NW_Uint32 aIndex); + + /** + * A callback that signals beginning of an element + * + * @since 1.0 + * @param aURI - + * @param aLocalName - + * @param aName - Name of the element + * @param aAttributeList - a list that keeps track of the attributes found for this element + * @return A value that indicates success/failure + */ + TInt StartElement( TDesC& aURI, TDesC& aLocalName, + TDesC& aName, MXMLAttributes* aAttributeList ); + /** + * A callback that signals end of an element + * + * @since 1.0 + * @param aURI - + * @param aLocalName - + * @param aName - Name of the element + * @return A value that indicates success/failure + */ + TInt EndElement( TDesC& aURI, TDesC& aLocalName, TDesC& aName ); + + /** + * Callback that signals characters inside an XML document + * + * @since 1.0 + * @param aBuf - A string buffer that will contain the characters + * @param aStart - An index indicating the starting position of the characters + * @param aLenght - AN offset indicating the terminal position of the characters + * @return A value that indicates success/failure + */ + TInt Charecters( TDesC& aBuf, TInt aStart, TInt aLength ); + + /** + * A callback that signals a XML comment + * + * @since 1.0 + * @param aComment - A string buffer that cintains the comment + * @return A value that indicates success/failure + */ + + TInt Comment( TDesC& aComment ); + + /** + * Need method description + * + * @since 1.0 + * @param + * @return A value that indicates success/failure + */ + TInt ProcessingInstructions( TDesC& aTarget, TDesC& aData ); + + /** + * Need method description + * + * @since 1.0 + * @param + * @return A value that indicates success/failure + */ + TInt IgnoreWhiteSpace( TDesC& aString ); + + /** + * A callback that signals beginning of an entity element + * + * @since 1.0 + * @param aName - A string buffer that will contain the entity name + * @return A value that indicates success/failure + */ + TInt StartEntity( TDesC& aName ); + + /** + * A callback that signals end of an entity element + * + * @since 1.0 + * @param aName - A string buffer that will contain the entity name + * @return A value that indicates success/failure + */ + TInt EndEntity( TDesC& aName ); + + /** + * Need method description + * + * @since 1.0 + * @param + * @return A value that indicates success/failure + */ + TInt SkippedEntity( TDesC& aName ); + + /** + * A callback that signals beginning of a CDATA section + * + * @since 1.0 + * @param + * @return A value that indicates success/failure + */ + TInt StartCDATA(); + + /** + * A callback that signals end of a CDATA section + * + * @since 1.0 + * @param + * @return A value that indicates success/failure + */ + TInt EndCDATA(); + + /** + * Need method description + * + * @since 1.0 + * @param + * @return A value that indicates success/failure + */ + TInt Error( TInt aErrorCode, TInt aSeverity ); + + void DataBuffer(const TDesC16& aBuf); + + /** + * Request to cancel parsing. + */ + void CancelParsing(); + + protected: + + + /** + * Method to verify the value of the attribute based on its type. If the value is + * valid then this method sets the value to the corresponding attribtue in the + * current element + * @since 1.0 + * @aAttrName - name of the attribute + * @aAttrValue - value of the attribute + * @return + */ + + TBool ProcessNConvertAttrL( const TDesC& aName, const TDesC& aAttrName, const TDesC& aAttrValue ); + + + + /** + * Parse for a color from the given string. + * + * @since 1.0 + * @param aString : color string to parse for color value + * @param aTransparent : transparent flag. + * @return parsed color. + */ + TGfxColor ParseColor( const TDesC& aString, + TBool& aTransparent ); + /** + * Process for a color from the given attribute name and value. + * + * @since 1.0 + * @param aName : attribute name + * @param aValue : attribute value. + * @return true if attribute is processes as a color attribute. + */ + TBool ProcessColorAttributeL( const TDesC& aName, + const TDesC& aValue ); + + + /** + * Process a for style info. + * + * @since 1.0 + * @param aName : attribute name + * @param aValue : attribute value + * @return true if a style info is processed. + */ + TBool ProcessStyleL( const TDesC& aValue ); + + /** + * Process a for transform info. + * + * @since 1.0 + * @param aName : attribute name + * @param aValue : attribute value + * @return true if a transform info is processed. + */ + TBool ProcessTransformL( const TDesC& aName, + const TDesC& aValue ); + + /** + * Process a for unit info. + * + * @since 1.0 + * @param aName : attribute name + * @param aValue : attribute value + * @return true if a unit info is processed. + */ + TBool ProcessUnitsL( const TDesC& aName, + const TDesC& aValue ); + + /** + * Convert any xml entity characters in the given string list to unicode characters. + * + * @since 1.0 + * @param aArray : array of strings to search for xml entities characters. + * @return + */ + void ConvertEntitiesToCharsL( CDesCArrayFlat& aArray ); + + /** + * Convert any xml entity characters in the given string to unicode characters. + * + * @since 1.0 + * @param aString : string to search for xml entities characters. + * @return non-NULL if at least one entity character is encountered. + */ + HBufC* ConvertEntitiesToCharsL( const TDesC& aString ); + + /** + * Find the given character in the given string at the starting index. + * + * @since 1.0 + * @param aString : string to find character. + * @param aStartIndex : starting index. + * @param aChar : character to search. + * @return index of first character encounterd, if found, -1 otherwise. + */ + TInt Find( const TDesC& aString, TInt aStartIndex, TChar aChar ); + + /** + * Create a substring from the given string. + * + * @since 1.0 + * @param aString : string to create a substring. + * @param aStartIndex : starting index. + * @param aEndIndex : endind index. + * @return substring from starting and ending indices. + */ + HBufC* SubstringL( const TDesC& aString, TInt aStartIndex, TInt aEndIndex ); + + /** + * Convert the given string (xml entity character) to an unicode character. + * + * @since 1.0 + * @param aChar : character object to store unicode character. + * @param aString : xml entity character string. + * @return true if there was a conversion. + */ + TBool ConvertEntityToChar( TChar& aChar, const TDesC& aString ); + + /** + * Append a substring to the given string at given indices. + * + * @since 1.0 + * @param aDest : string to append substring to. + * @param aSource : string to append substring from. + * @param aStartIndex : starting index for substring. + * @param aEndIndex : ending index for substring. + * @return + */ + void Append( TDes& aDest, const TDesC& aSource, TInt aStartIndex, TInt aEndIndex ); + + /** + * Convert the given string (xml entity character) an unicode character. + * + * @since 1.0 + * @param aChar : character object to store unicode character. + * @param aString : xml decimal entity character string. + * @return true if a conversion was made. + */ + TBool ConvertDecimalStringToChar( TChar& aChar, const TDesC& aString ); + + /** + * Convert the given string (xml entity character) an unicode character. + * + * @since 1.0 + * @param aChar : character object to store unicode character. + * @param aString : xml hexadecimal entity character string. + * @return true if a conversion was made. + */ + TBool ConvertHexStringToChar( TChar& aChar, const TDesC& aString ); + + + void FilterCharactersL( TDesC& aString ); + + // Leaveable StartElementL function called by StartElement + TInt StartElementL( TDesC& aURI, TDesC& aLocalName, + TDesC& aName, MXMLAttributes* aAttributeList ); + + + void AppendToCData( const TDesC& aText ); + + TBool ExtractStyleValuePair( const TDesC& aString, TPtrC& aName, TPtrC& aValue ); + + void SetForwardReferences(CSvgErrorImpl& aError); + + void RemoveFalseSwitchCasesOrMakeInvisible(); + void RemoveFalseElementsOrMakeInvisible(); + TBool VerifyReqExReqFtrSysL( CSvgElementImpl* aElement ); + + // Initiate image loading for elements + void LoadImages(); + + /** + * Find out the system language for the client environment based on + * SVG source hint + * + * @since 1.0 + * @param aValue - A string buffer that contains the System Language hint + * @return None + */ + void SystemLanguage( TPtr aValue ); + + /** + * Private constructor + * + * @since 1.0 + * @param + * @return + */ + CSvgContentHandler(); + + /** + * Check for possible svg elements placed inside entity references. + * If so, attempt to parse as part of the document. + * If parsing was successful, return ETrue, otherwise return EFalse. + * + * @since 1.0 + * @param + * @return If parsing was successful + */ + TBool ParseEntity( const TDesC& aEntity ); + + /** + * Post parsing processing, such as removing false switch elements. + * + * @since 1.0 + * @param + * @return none + */ + void PostParseProcessing(); + + /** + * Removes references of element. Usually called before the element is + * deleted. + * + * @since s60 3.2 + * @param aElement Pointer of element that is about to be deleted. + * @return none + */ + void RemoveInternalReferences( CSvgElementImpl* aElement ); + + private: + + CSvgElementImpl*iRootElement; // SVG Element + CSvgElementImpl*iCurrentElement; // Latest discovered element + CSvgElementImpl*iCurrentParentElement; // Parent element for the current depth + CSvgDocumentImpl* iDocument; // The document object to which this SVG source is processed + + + + // Various booleans that indicate success/failure or true/false for various attributes + TBool iIsColorAnim; + // Indicating begin or end attribute. + TBool iBeginEndAtr; + + + // Various buffers that hold animation time values + TPtrC iFromVal; + TPtrC iToVal; + TPtrC iByVal; + TPtrC iValues; + TPtrC iTimes; + TPtrC iSplines; + + HBufC* iSystemLanguage; + + // Various attributes that hold document "depth" information + TInt iIgnoreDepth; + TBool iIsSvgElement; + + CSvgErrorImpl* iSvgError; + + /*Added to support forward references in Use and animtion elements */ + RPointerArray* iUseElementArray; + RPointerArray* iAnimRefElementArray; + + //array to keep track of switch elements + //so we can go back at the end of parsing and remove the elements + //that dont evaluate to true from memory + RPointerArray* iSwitchElementArray; + RPointerArray* iReqFetAttSysArray; + RPointerArray* iAnimationElementArray; + // CData container -- used to append pieces of cdata from XML parser + // callbacks: Charecters & StartEntity + HBufC* iCData; + + // Reference to loading listeners + const RPointerArray* iLoadingListeners; + + TBool iCancelRequested; + + RPointerArray iImageElements; + TBool iRemoveFalseSwitchElements; + }; + +#endif diff -r 000000000000 -r d46562c3d99d svgtopt/SVG/SVGEngine/inc/SVGEngineImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVG/SVGEngine/inc/SVGEngineImpl.h Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,970 @@ +/* +* Copyright (c) 2003 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: SVG Engine header file + * +*/ + + +#ifndef __INC_CSVGENGINEIMPL__ +#define __INC_CSVGENGINEIMPL__ + +#if !defined(__E32BASE_H__) +#include +#endif + +#include + + +#include "SVGEngineInterfaceImpl.h" +#include "GfxAffineTransform.h" +#include "SVGEvent.h" +#include "SVGDocumentImpl.h" +#include "SVGRequestObserver.h" +#include "SVGImageElementImpl.h" +#include "SVGFourPointRect.h" +#include "SVGListener.h" +#include "SVGFontHashMap.h" +#include "SvgBitmapFontProvider.h" +#include + +// Svg Engine states +enum TSvgEngineState + { + ESVGEngineRunning, + ESVGEnginePaused, + ESVGEngineNotStarted, + ESVGEngineStopped + }; +typedef TUint8 TAnimStatus; + + +class CSvgSchemaData; +class CSvgElementImpl; +class MXmlDOMImplementation; +class CGfx2dGc; + +class CSvgEventHandler; +class MSvgEventReceiver; +class CSvgErrorImpl; +class CSvgAElementImpl; +class CSvgTextAreaElementImpl; +class CSvgTextElementImpl; + +class CSvgExternalDataHandler; +class MSvgDataRequester; + +// temporary for debugging +class CSvgTimer; +// temporary for debugging + +//This includes the main rendering loop. + +/** + * Class description goes here. + * + * @lib SVGEngine.lib + * @since 1.0 + */ +class CSvgEngineImpl : public CBase, public MSVGImageLoadingObserver + { + public: // Constructor & Destructor + + static CSvgEngineImpl* NewL(CSvgBitmapFontProvider *aSvgBitmapFontProvider); + + static CSvgEngineImpl* NewLC(CSvgBitmapFontProvider *aSvgBitmapFontProvider); + + void ConstructL(CSvgBitmapFontProvider *aSvgBitmapFontProvider); + + /** + * Two phase constructor + * + * @since 1.0 + * @param aFrameBuffer - Pointer to a buffer where the SVG document raster is drawn + * @param aReqObserver - Pointer to a client side object that implements the MSvgRequestObserver interface + * @return An instance of the SVG Engine + */ + static CSvgEngineImpl* NewL( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec, CSvgBitmapFontProvider *aSvgBitmapFontProvider ); + + /** + * Two phase constructor + * + * @since 1.0 + * @param aFrameBuffer - Pointer to a buffer where the SVG document raster is drawn + * @param aReqObserver - Pointer to a client side object that implements the MSvgRequestObserver interface + * @return An instance of the SVG Engine + */ + static CSvgEngineImpl* NewLC( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec, CSvgBitmapFontProvider *aSvgBitmapFontProvider ); + + /** + * Destructor + * + * @since 1.0 + * @param None + * @return None + */ + + virtual ~CSvgEngineImpl(); + + static CSvgEngineImpl* NewL( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec, CSvgBitmapFontProvider *aSvgBitmapFontProvider,SVGRendererId aRendererType ); + static CSvgEngineImpl* NewLC( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec, CSvgBitmapFontProvider *aSvgBitmapFontProvider,SVGRendererId aRendererType ); + public: // New Functions + /** + * Get the NVG-TLV data + * + * @since 1.0 + * @return descriptor pointing to the encoded data. + */ + const TPtrC8 TLVEncodedData() const; + + /** + * Kick off the process of rasterizing the SVG document elements + * + * @since 1.0 + * @param aRootElement - Root element of the SVG document + * @return None + */ + void DrawElementsL( CSvgElementImpl* aRootElement); + /** + * Kick off the process of placing graphical objects in their positions for rasterization + * + * @since 1.0 + * @param aRootElement - Root element of the SVG document + * @return None + */ + void UpdateCTM(CSvgDocumentImpl* aSvgDocument ); + + + /** + * Invalidate the current raster and hence kick off another round of rasterization + * process + * + * @since 1.0 + * @param None + * @return None + */ + void RedrawL(); + + + /** + * Destroy the current representation of the SVG document + * + * @since 1.0 + * @param None + * @return None + */ + void Destroy(); + + /** + * An acessor to the document object that represents the current SVG source + * + * @since 1.0 + * @param None + * @return Pointer to the document object instance. + */ + CSvgDocumentImpl* Document(); + + /** + * Overwrite the current path information in the given element + * + * + * @param hPath - handle to a path + * @param hElement - handle to a path element + * @return none + */ + void UpdatePath( CGfxGeneralPath* hPath, CSvgElementImpl* hElement ); + + /** + * Kick off the processing of SVG source, and animation time frames + * + * @since 1.0 + * @param None + * @return A boolean value that indicates success/failure + */ + + TBool StartFrameLoopL(); + + /** + * Obtain an image source embedded within a SVG source (JPEG, PNG) + * + * @since 1.0 + * @param aUri - A string buffer with the URI of the image source + * @param aFileName - A string buffer with the contents of the image source + * @return ETrue - Success, EFalse - Failure + * + */ + TBool FetchImage( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ); + + /** + * Return the animation duration for the given document, if NULL (default) + * then use the document attached to engine. The value 0xFFFFFFFF is + * return is the animation is indefinite. + * + * @since 1.0 + * @param aDocumentElement - document to find animation duration. + * @return An integer containing the aniamtion duration value + */ + TUint32 Duration( CSvgDocumentImpl* aDocumentElement = NULL ); + + /** + * Accessor for the Graphics Context object + * + * @since 1.0 + * @param None + * @return A pointer to the Graphics Context object + */ + CGfx2dGc* GraphicsContext(); + + /** + * Internally render SVG source into a buffer (rasterization) + * + * @since 1.0 + * @param aSvgData - A string buffer containing the SVG source + * @param aFrameBuffer - A bitmap passed by the client that will contain the raster + * @param aPreserveAspectRatio - The aspect ratio (see SVG spec for more) for the raster + * @return TBool - ETrue/EFalse indicate presence/absence of the resource + */ + TInt RenderFileToBuffer( const TDesC8& aSvgData, + CFbsBitmap* aFrameBuffer, + CFbsBitmap* aMask, + TBool aPreserveAspectRatio ); + + + void RenderFileL( const TDesC8& aSvgData, + CFbsBitmap* aFrameBuffer, + CFbsBitmap* aMask, + TBool aPreserveAspectRatio); + + + /** + * A private method that toggles debug info for developers + * + * @since 1.0 + * @param None + * @return None + */ + void SwitchDebugInfo(TBool debug); + + /** + * A private method that switch between OpenVG and VGR implementation + * + * @since 1.0 + * @param TBool aCustomOption ETrue set OpenVG + * @return None + */ + void CustomOption( TBool aCustomOption ); + + /** + * This method is for future extension, in which an external script engine + * could be used to evaluate a script description. + * + * @since 1.0 + * @param : aScript -- A description of script from the "on" attribute. + * + * @param : aCallerElement -- The element that calls the script by a + * an event of the "on" attribute. + * @return : For future use. Value is ignored. + */ + TBool ScriptCall( const TDesC& aScript, + CSvgElementImpl* aCallerElement ); + + /** + * Set the URI information in the Engine + * + * @since 1.0 + * @param + * @return + */ + void LinkRequest( const TDesC& aUri ); + /** + * Need method description + * + * @since 1.0 + * @param + * @return + */ + void LinkRequestWithShow(const TDesC& aUri, const TDesC& aLinkShow); + + /** + * Accessor for the current engine time + * + * @since 1.0 + * @param None + * @return An integer that represents the current engine time + */ + TInt32 CurrentTIme(); + + /** + * Set SVG Dimensions to Frame buffer size + * + * @since 1.0 + * @param None + * @return An integer that represents the current engine time + */ + + void SetSvgDimensionToFrameBufferL(TUint aWidth, TUint aHeight); + + /** + * Generate mask bitmap from alpha channel of the framebuffer + * + * @since + * @param + * @return + */ + void GenerateMask( CFbsBitmap* aMask ); + + /** + * Set background color + * + * @since + * @param + * @return + */ + void SetBackgroundColor(TUint32 aRGBA8888Color); + + /** + * Returns SVG Engine State + * + * @since 1.0 + * @param None + * @return An integer that represents SVG Engine state + */ + TSvgEngineState SVGEngineState(); + + /** + * Sets SVG Engine state + * + * @since 1.0 + * @param An integer that represents SVG Engine state + * @return void + */ + void SetSVGEngineState(TSvgEngineState aState); + + /** + * Sets the GDI context from the Bitmap. + * + * @since 1.0 + * @param : aFrameBuffer -- Bitmap to draw svg content. + * @param : aReqObserver -- Request observer called by svg engine. + * @return + */ + void SetGdiContextL(CFbsBitmap* aCurrentBitmap, CFbsBitmap* aMask = NULL); + + void SetGdiContextL(CFbsBitmap* aCurrentBitmap, CFbsBitmap* aMask,TSize aCurrentBitmapSize,TDisplayMode aRenderDspMode,TDisplayMode aMaskDspMode); + /** + * Start the Engine so that the first frame is drawn when the call is finished. + * + * + * @param : aError + * @return: None + */ + void StartEngine(CSvgErrorImpl* aError = NULL); + void RenderFrame( TUint aCurrentTime ); + + /** + * Set the Document + * + * + * @param : CSvgDocumentImpl* aDocument + * @return: None + */ + void SetDocument(CSvgDocumentImpl* aDocument); + + /** + * Given a document handle and a url this call attaches + * the given data (ldata) to every element that references that url + *@param aDocument - Document Pointer + *@param lUrl- uri string that is an external resource to be retrieved + *@param ldata - byte array containing the data that that external resource recieved + *@return none + */ + + void ChangeDuration( TUint32 aTimerDuration ); + + void Resume(TInt32 aTime); + + void SeekEngine( TUint32 aTime); + + void SetMediaTime(TUint32 aTimeInMilliSeconds); + + /** + * Initializes the SVG Engine primarily with width and height informtion + * This is based on the attribute specifications for the root 'svg' element + * + * @since 1.0 + * @param None + * @return None + */ + void InitializeEngineL(); + + /** + * Get all the bounding-boxes for the given text and the contexts include + * the text was found. The bounding-boxes are transformed, taking zooming/panning + * in account. + * + * @param : aString -- String to search in the document. + * @param : aBoundingBoxes -- Array to hold bounding-boxes info. + * @param : aTexts -- Array to hold complete text of cdata where aString was found. + * @return: None + */ + /* + void FindBBoxesForHorizontalText( const TDesC& aString, + RArray& aBoundingBoxes, + RArray& aTexts, + RArray& aElementIds, + TBool aCaseSensitive ); + */ + /** + * Get all the bounding-boxes for the given text and the contexts include + * the text was found. The bounding-boxes are transformed, taking zooming/panning + * in account. + * + * @param : aString -- String to search in the document. + * @param : aBoundingBoxes -- Array to hold bounding-boxes info. + * @param : aTexts -- Array to hold complete text of cdata where aString was found. + * @return: None + */ + void FindBBoxesForRotatedText( const TDesC& aString, + RPointerArray& aBoundingBoxes, + RArray& aTexts, + RArray& aElementIds, + TBool aCaseSensitive ); + + /** + * Process the given coordinate to determine if it is inside/outside a + * hyperlink; then, notify the hyperlink listeners. + * + * @param : aX -- x coordinate + * @param : aY -- y coordinate + * @return: None + */ + void CheckForHyperlinkMouseover( TInt aX, TInt aY ); + + /** + * Add a hyperlink listener. + * + * @param : aListener -- hyperlink listener + * @param : aY -- y coordinate + * @return: None + */ + void AddHyperlinkListener( MSvgHyperlinkListener* aListener ); + + /** + * Add a textbox listener. + * + * @param : aListener -- textbox listener + * @return: None + */ + void AddTextAreaListener( MSvgTextAreaListener* aListener ); + + /** + * Remove a textbox listener. + * + * @param : aListener -- textbox listener + * @return: None + */ + void RemoveTextAreaListener( MSvgTextAreaListener* aListener ); + + void NotifyTextAreaEntered( CSvgTextAreaElementImpl* aTextAreaElement ); + + void NotifyTextAreaExited( CSvgTextAreaElementImpl* aTextAreaElement ); + + void AddTextListener( MSvgTextListener* aListener ); + + void RemoveTextListener( MSvgTextListener* aListener ); + + void NotifyTextEntered( CSvgTextElementImpl* aTextElement ); + + void NotifyTextExited( CSvgTextElementImpl* aTextElement ); + + /** + * Add an interactive element listener. + * @since v3.2 + * @param : aListener - interactive element listener + * @return: None + */ + void AddInteractiveElementListener( MSvgInteractiveElementListener* aListener ); + + /** + * Notify the client when the pointer enters an interactive element. + * @since v3.2 + * @param : aElement - The element which has some animation + * @return: None + */ + void NotifyInteractiveElementEntered(CSvgElementImpl* aElement); + + /** + * Notify the client when the pointer exists an interactive element. + * @since v3.2 + * @param : aElement - The element which has some animation + * @return: None + */ + void NotifyInteractiveElementExited(CSvgElementImpl* aElement); + + /** + * Remove an interactive element listener. + * @since v3.2 + * @param : aListener - interactive element listener + * @return: None + */ + void RemoveInteractiveElementListener( MSvgInteractiveElementListener* aListener ); + + /** + * Add a hyperlink listener. + * + * @param : aListener -- hyperlink listener + * @param : aY -- y coordinate + * @return: None + */ + void RemoveHyperlinkListener( MSvgHyperlinkListener* aListener ); + + void NotifyElementActivatedLinkEntered( CSvgElementImpl* aElement); + + void NotifyElementActivatedLinkExited( CSvgElementImpl* aElement); + /** + * Add a hyperlink listener. + * + * @param : aListener -- hyperlink listener + * @param : aY -- y coordinate + * @return: None + */ + void AddAnimationListener( MSvgAnimationListener* aListener ); + + /** + * Add a hyperlink listener. + * + * @param : aListener -- hyperlink listener + * @param : aY -- y coordinate + * @return: None + */ + void RemoveAnimationListener( MSvgAnimationListener* aListener ); + + void NotifyAnimationStarted(); + + void NotifyAnimationPaused(); + + void NotifyAnimationEnded(); + + //ViewPort Listener + void GetViewPort(TInt getWidth, TInt getHeight, TBool isWidthInPer, TBool isHeightInPer, TInt &setWidth, TInt &setHeight); + + // Return ETrue if the given element (id) is visible on the frame buffer. + TBool IsElementVisible( TInt aElementId ); + + /** + * Get Size + * + * @since 1.0 + * @param None + * @return None + */ + TSize GetSize(); + /** + * Need method description + * + * @since 1.0 + * @param + * @return + */ + void UpdatePresentation(const TInt32& aParam); + + /** + * Return the data pointed to by the given URI string, + * from an external source. Calling client takes ownership + * of returned HBufC8 pointer. + * + * @since 1.0 + * @param + * @return + */ + HBufC8* FetchExternalDataL( const TDesC& aUri ); + + + void AddViewPortListener(MSvgViewPortListener* aListener); + + void RemoveViewPortListener(MSvgViewPortListener* aListener); + + /** + * This method sets the volume with user input as a percentage + * value (unsigned between 0 and 100 ) for the currently loaded + * document + * + * @since S60 3.1 + * @param aPercentage percentage value of volume + * @return none + */ + void SetAudioVolume( TInt aPercentage ); + TBool IsSVGEnginePaused(); + + void SetBitmapHeader(const TDesC* aHeaderData); + public: // Functions from base classes + // From CSvgElementImpl + /** + * Process various events received by the client for the SVG image + * + * @since 1.0 + * @param aSvgDocument Pointer to the SVG Document on which event is + * to be processed. + * @param aEvent - Pointer to the object that contains SVG event information (implements MSvgEvent interface) + * @return None + */ + void ProcessEventL( CSvgDocumentImpl* aSvgDocument, MSvgEvent* aEvent, + TBool aRedraw = ETrue ); + + /** + * Returns false only when document was loaded/prepared with in thumbnail mode + * and the frame buffer is larger than 80x80 + * Probably move 80x80 size to .mmp file (compiler option) + * + * @since 1.0 + * @return EFalse if thumb nail restrictions apply to the current document. + */ + TBool PassesThumbNailRestriction(); + + /** + * Obtain a font source embedded within an SVG source + * + * @since 1.0 + * @param aUri - A string buffer with the URI of the font source + * @param aFileHandle + * @return ETrue - Success, EFalse - Failure + * + */ + TBool FetchFont( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ); + + /** + * Set to ETrue to ignore notification to UpdateScreen in RequestObserver + * + * @param : aBool -- flag to indicate ignore UpdateScreen call + * @return: None + */ + void SetIgnoreUpdateScreen( TBool aBool ); + + /** + * Add a MSvgMouseListener to this SvgEngine + * + * @param : aListener -- listener to add to listener list + * @return: None + */ + void AddMouseListener( const MSvgMouseListener* aListener ); + + /** + * Remove a MSvgMouseListener to this SvgEngine + * + * @param : aListener -- listener to remove from listener list + * @return: None + */ + void RemoveMouseListener( const MSvgMouseListener* aListener ); + + /** + * Return number of mouselisteners. + * + * @return: mouse-listener count + */ + TInt MouseListenerCount(); + + /** + * Return the (first) viewable element at the given point. + * visible svg element. + * + * @param : aElements -- list to contain viewable elements with bounding-boxes containing + * the given point. + * @param : aX -- x coordinate + * @param : aY -- y coordinate + * @return: NULL, if none, lowest-level element containing point. + */ + void GetViewableElementsAtPoint(CSvgDocumentImpl* aSvgDocument, RPointerArray& aElements, TInt aX, TInt aY ); + + /** + * Find all elements in the subtree for "viewable" elements, including the given + * starting node element. Viewable element are concrete elements that are drawn, + * such as , , , etc. + * This function only checks for containing of the elements' bounding-boxes. + * + * @param : aStartElement -- starting node to search in subtree. + * @param : aElementList -- List to containing "viewable" elements. + * @return: None + */ + void FindAllViewableElements( CSvgElementImpl* aStartElement, RPointerArray& iElementList ); + + /** + * Find all elements in the subtree for non-viewable elements, including the given + * starting node element. Viewable element are abstract elements that are not drawn, + * such as , , , etc. + * + * @param : aStartElement -- starting node to search in subtree. + * @param : aElementList -- List to containing non-viewable elements. + * @return: None + */ + void FindAllNonViewableElements( CSvgElementImpl* aStartElement, RPointerArray& iElementList ); + + /** + * Send to mouse listeners of a mouse-pressed event. + * + * @param : aElements -- elements affected by mouse-event. + * @param : aX -- X-cooordinate of mouse-event. + * @param : aY -- X-cooordinate of mouse-event. + * @return: None + */ + void NotifyMousePressed( RPointerArray& aElements, + TInt aX, TInt aY ); + + /** + * Send to mouse listeners of a mouse-released event. + * + * @param : aElements -- elements affected by mouse-event. + * @param : aX -- X-cooordinate of mouse-event. + * @param : aY -- X-cooordinate of mouse-event. + * @return: None + */ + void NotifyMouseReleased( RPointerArray& aElements, + TInt aX, TInt aY ); + + /** + * Send to mouse listeners of a mouse-entered event. + * + * @param : aElements -- elements affected by mouse-event. + * @param : aX -- X-cooordinate of mouse-event. + * @param : aY -- X-cooordinate of mouse-event. + * @return: None + */ + void NotifyMouseEntered( RPointerArray& aElements, + TInt aX, TInt aY ); + /** + * Send to mouse listeners of a mouse-exited event. + * + * @param : aElements -- elements affected by mouse-event. + * @param : aX -- X-cooordinate of mouse-event. + * @param : aY -- X-cooordinate of mouse-event. + * @return: None + */ + void NotifyMouseExited( RPointerArray& aElements, + TInt aX, TInt aY ); + + /** + * Send to mouse listeners of a mouse-moved event. + * + * @param : aElements -- elements affected by mouse-event. + * @param : aX -- X-cooordinate of mouse-event. + * @param : aY -- X-cooordinate of mouse-event. + * @return: None + */ + void NotifyMouseMoved( RPointerArray& aElements, + TInt aX, TInt aY ); + + void NotifyHyperlinkEntered( CSvgAElementImpl* aAElementHandle ); + void NotifyHyperlinkEntered( const TDesC& aUri ); + + void NotifyHyperlinkExited( CSvgAElementImpl* aAElementHandle ); + void NotifyHyperlinkExited( const TDesC& aUri ); + + void NotifyHyperlinkActivated( CSvgAElementImpl* aAElementHandle ); + void NotifyHyperlinkActivated( const TDesC& aUri ); + + void NotifyHyperlinkActivatedWithShow( const TDesC& aUri, const TDesC& aShow ); + + void NotifyTextAreaActivated( CSvgTextAreaElementImpl* aTextArea); + + void NotifyTextActivated( CSvgTextElementImpl* aTextElement); + + + /** + * Returns whether engine is ready to render + * Used by SvgTimer + */ + TBool ReadyToRender(); + + /** + * Reset animation timer to the beginning. + */ + void ResetTimer(); + + /** + *Save Svg File After doing the text editing + */ + void SaveSvgL( const TDesC& aFileName ); + + /* + *Write the buffer to the stream - saving the file -svg -text editing + */ + TInt WriteToStream(RFileWriteStream &aStream,TPtrC aWriteBuffer); + + /* + *Function to process the tag and do the needful + */ + + HBufC* TextTagProcessingL(TPtrC* aCData, TInt &aStartOffset, TInt aOrgLength, + TBool aEndingWithTag); + + /* + *Function to process the +const TInt KClosingTextTagLength = 7; +// Length of +const TInt KClosingTextAreaTagLength = 11; +// Length of < +const TInt KClosingBracesLength = 1; +// Number of chars to be converted at a time to Unicode +const TInt KMaxConversionChars = 20; +_LIT(KClosingTextTag,""); +_LIT(KClosingTextAreaTag,""); +_LIT(KClosingBraces,">"); + +// --------------------------------------------------------------------------- +// Two phase constructor for this class +// JSR 226 API +// --------------------------------------------------------------------------- +CSvgEngineImpl* CSvgEngineImpl::NewL(CSvgBitmapFontProvider *aSvgBitmapFontProvider) + { + CSvgEngineImpl* self = new ( ELeave ) CSvgEngineImpl(); + CleanupStack::PushL( self ); + self->ConstructL(aSvgBitmapFontProvider); + CleanupStack::Pop(); + return self; + } + + +// -------------------------------------------------------------------------- +// CSvgEngineImpl* CSvgEngineImpl::NewLC() +// --------------------------------------------------------------------------- +CSvgEngineImpl* CSvgEngineImpl::NewLC(CSvgBitmapFontProvider *aSvgBitmapFontProvider) + { + CSvgEngineImpl* self = new ( ELeave ) CSvgEngineImpl(); + CleanupStack::PushL( self ); + self->ConstructL(aSvgBitmapFontProvider); + return self; + } + +// -------------------------------------------------------------------------- +// CSvgEngineImpl::CSvgEngineImpl() : iTextAreaHandle( NULL ), +// --------------------------------------------------------------------------- +CSvgEngineImpl::CSvgEngineImpl() : iTextAreaHandle( NULL ), + iRequestObserver( NULL ), + iFrameBuffer( NULL ), + iFrameBufferSize(TSize(0,0)), + iFontHashMap ( NULL ), + iSvgDocument( NULL ), + iBackgroundColor(0x00000000), + iShowDebugInfo( EFalse ), + iSvgEngineState(ESVGEngineNotStarted), + iTimeoutSeconds( 0 ), + iRenderQuality(2), // Set To Rendering quality "high" + iCustomOption( ETrue ), + iFrameBufferOverridesViewport( EFalse ), + iClientDefinedViewPort(EFalse) + + { + } + + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::ConstructL() +// --------------------------------------------------------------------------- +void CSvgEngineImpl::ConstructL(CSvgBitmapFontProvider *aSvgBitmapFontProvider) + { + iGfxContext = NULL; + + iSvgBitmapFontProvider = aSvgBitmapFontProvider ; + // create CSvgErrorImpl object + iSvgError = CSvgErrorImpl::NewL(); + + iFontHashMap = CSvgFontHashMap::NewL(); + + SetIgnoreUpdateScreen( EFalse ); + + // The iCustomOption need to be initialized for JSR + + iCustomOption = ETrue; + + } + + + +// --------------------------------------------------------------------------- +// Two phase constructor for this class +// Accepts a frame buffer and a MSvgRequestObserver object from the client +// Buffer is used for rasterization of SVG content +// Observer object, if provided, is used for notifying the client on updates +// --------------------------------------------------------------------------- +CSvgEngineImpl* CSvgEngineImpl::NewL( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider ) + { + CSvgEngineImpl* self = new ( ELeave ) CSvgEngineImpl( aFrameBuffer, + aReqObserver ); + CleanupStack::PushL( self ); + self->ConstructL(aFontSpec, aSvgBitmapFontProvider); + CleanupStack::Pop(); + + return self; + } + + +// --------------------------------------------------------------------------- +// Two phase constructor for this class +// Accepts a frame buffer and a MSvgRequestObserver object from the client +// Buffer is used for rasterization of SVG content +// Observer object, if provided, is used for notifying the client on updates +// --------------------------------------------------------------------------- +CSvgEngineImpl* CSvgEngineImpl::NewLC( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider ) + { + CSvgEngineImpl* self = new ( ELeave ) CSvgEngineImpl( aFrameBuffer, aReqObserver ); + CleanupStack::PushL( self ); + self->ConstructL(aFontSpec, aSvgBitmapFontProvider); + + return self; + } + +// --------------------------------------------------------------------------- +// Symbian style private method that is used to construct heap objects +// Builds the Graphics device objects with the client's frame buffer info +// Builds the event handler object +// --------------------------------------------------------------------------- +void CSvgEngineImpl::ConstructL( TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider) + { + iBitmapFontSpec = aFontSpec; +// iGfxContext is created through CSvgEngineInterfaceImpl::ConstructL + // iGfxContext = CGfx2dGcVGR::NewL( iFrameBuffer->SizeInPixels(), iBitmapFontSpec ); + iSvgBitmapFontProvider = aSvgBitmapFontProvider ; + + iGfxContext = CGfx2dGcOpenVG::NewL( iFrameBuffer->SizeInPixels(), iBitmapFontSpec, iSvgBitmapFontProvider ); + // create CSvgErrorImpl object + iSvgError = CSvgErrorImpl::NewL(); + iFontHashMap = CSvgFontHashMap::NewL(); + iSvgNames = new (ELeave) CDesC16ArrayFlat(5); + } + +// --------------------------------------------------------------------------- +CSvgEngineImpl* CSvgEngineImpl::NewL( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider ,SVGRendererId aRendererType) + { + CSvgEngineImpl* self = new ( ELeave ) CSvgEngineImpl( aFrameBuffer, + aReqObserver ); + CleanupStack::PushL( self ); + self->ConstructL(aFontSpec, aSvgBitmapFontProvider,aRendererType); + CleanupStack::Pop(); + + return self; + } + + +// --------------------------------------------------------------------------- +// Two phase constructor for this class +// Accepts a frame buffer and a MSvgRequestObserver object from the client +// Buffer is used for rasterization of SVG content +// Observer object, if provided, is used for notifying the client on updates. +//This contains the renderer selector parameter +// --------------------------------------------------------------------------- +CSvgEngineImpl* CSvgEngineImpl::NewLC( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider,SVGRendererId aRendererType ) + { + CSvgEngineImpl* self = new ( ELeave ) CSvgEngineImpl( aFrameBuffer, aReqObserver ); + CleanupStack::PushL( self ); + self->ConstructL(aFontSpec, aSvgBitmapFontProvider,aRendererType); + + return self; + } + +// --------------------------------------------------------------------------- +// Symbian style private method that is used to construct heap objects +// Builds the Graphics device objects with the client's frame buffer info +// Builds the event handler object. +//This contains the renderer selector parameter NGA +// --------------------------------------------------------------------------- +void CSvgEngineImpl::ConstructL( TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider,SVGRendererId aRendererType) + { + iBitmapFontSpec = aFontSpec; +// iGfxContext is created through CSvgEngineInterfaceImpl::ConstructL + // iGfxContext = CGfx2dGcVGR::NewL( iFrameBuffer->SizeInPixels(), iBitmapFontSpec ); + iSvgBitmapFontProvider = aSvgBitmapFontProvider ; + + iGfxContext = CGfx2dGcOpenVG::NewL( iFrameBufferSize, iBitmapFontSpec, iSvgBitmapFontProvider ,aRendererType); + // create CSvgErrorImpl object + iSvgError = CSvgErrorImpl::NewL(); + iFontHashMap = CSvgFontHashMap::NewL(); + iSvgNames = new (ELeave) CDesC16ArrayFlat(5); + } + + +// --------------------------------------------------------------------------- +// Private constructor +// Initializes private attributes +// --------------------------------------------------------------------------- +CSvgEngineImpl::CSvgEngineImpl( CFbsBitmap* aFrameBuffer, + MSvgRequestObserver* aReqObserver ) : iTextAreaHandle( NULL ), + iRequestObserver( aReqObserver ), + iFrameBuffer( aFrameBuffer ), + iFrameBufferSize(TSize(0,0)), + iFontHashMap ( NULL), + iSvgDocument( NULL ), + iBackgroundColor(0x00000000), + iShowDebugInfo( EFalse ), + iSvgEngineState(ESVGEngineNotStarted), + iCustomOption( ETrue ), + iFrameBufferOverridesViewport( EFalse ) + + + { + if(aFrameBuffer && aFrameBuffer->Handle()>0) + { + iFrameBufferSize = aFrameBuffer->SizeInPixels(); + } + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +CSvgEngineImpl::~CSvgEngineImpl() + { + Destroy(); + + if ( iFontHashMap ) + { + delete iFontHashMap; + iFontHashMap = NULL; + } + + iSvgTextBoundingBoxes.ResetAndDestroy(); + iSvgTextBoundingBoxes.Close(); + + if ( iGfxContext ) + { + delete iGfxContext; + iGfxContext = NULL; + } + if ( iSvgError ) + { + delete iSvgError; + iSvgError = NULL; + } + if (iTextAreaHandle) + { + delete iTextAreaHandle; + iTextAreaHandle = NULL; + } + + iTextAreaListeners.Close(); + iTextListeners.Close(); + iHyperlinkListeners.Close(); + iAnimationListeners.Close(); + iSvgMouseListeners.Close(); + iInteractiveElementListeners.Close(); + delete iSvgNames; + } + +// --------------------------------------------------------------------------- +// Draws aRootElement and calls itself for children. +// Handles switch element differently, as it only draws one of its children. +// --------------------------------------------------------------------------- + +void CSvgEngineImpl::DrawElementsL( CSvgElementImpl* aRootElement) + { + if ( aRootElement != NULL) + { + TInt32 displayValue = 0; + // while we have next elements + CSvgElementImpl* newElement = aRootElement; + while( newElement != NULL ) + { + if(newElement->GetAttributeIntL( KCSS_ATTR_DISPLAY, displayValue ) == KErrNoAttribute) + { + newElement = ( CSvgElementImpl* ) newElement->FirstChild(); + while ( newElement != NULL ) + { + DrawElementsL( newElement ); + newElement = ( CSvgElementImpl * ) newElement->NextSibling(); + } + return; + } + + if(displayValue != KDisplayEnumNone) // is it a hidden element + { + CCssValue* CssValue = NULL; + TReal32 opacity = 1; + + // check visisbility + TInt32 visbilityValue = 0; + TInt visibility = newElement->GetAttributeIntL( KCSS_ATTR_VISIBILITY, visbilityValue ); + + newElement->FindProperty( KCSS_ATTR_GROUP_OPACITY, CssValue, newElement ); + if ( CssValue ) + { + opacity = ((CFloatCssValueImpl*)CssValue)->Value(); + } + + if( opacity != 1 && !newElement->IsInherited( KCSS_ATTR_GROUP_OPACITY ) ) + { + iGfxContext->BindToImageL(); + // Group opacity + if ( newElement->ElemID() == KSvgGElement && newElement->FirstChild() ) + { + // recurse with right context. + DrawElementsL( ( CSvgElementImpl* )newElement->FirstChild()); + } + // Element opacity + else + { + TBool canDraw = ETrue; + if( (visibility == KErrNone) && (visbilityValue == 0) ) + { + canDraw = newElement->DrawL( iGfxContext, NULL ) ; + } + if( canDraw && newElement->FirstChild() ) + { + DrawElementsL( ( CSvgElementImpl* )newElement->FirstChild() ); + } + } + + // Blend opacity context buffer with parent's gfx context buffer + iGfxContext->UnbindFromImageL( opacity ); + } + else // no opacity or is inherited from above.... + { + TBool canDraw = ETrue; + if( (visibility == KErrNone) && (visbilityValue == 0) ) + { + canDraw = newElement->DrawL(iGfxContext, NULL ); + } + if( canDraw && newElement->FirstChild() ) + { + DrawElementsL( ( CSvgElementImpl* )newElement->FirstChild()); + } + } + } + newElement = ( CSvgElementImpl * )newElement->NextSibling(); + + }// end while.... + } + } + +//-------------------------------------------------------------------- +//CFbsBitmap* CSvgEngineImpl::CreateOpacityFrameBufferL() +//-------------------------------------------------------------------- +CFbsBitmap* CSvgEngineImpl::CreateOpacityFrameBufferL() +{ + CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap(); + + if ( iFrameBuffer != NULL ) + { +/*NGA reverse*/if ( bitmap->Create( iFrameBufferSize, EColor16MU ) != KErrNone ) + { + delete bitmap; + bitmap = NULL; + } + } + return bitmap; + } + +// --------------------------------------------------------------------------- +// Copy 32-bit buffer +// --------------------------------------------------------------------------- + +void CSvgEngineImpl::CopyBuffer( TUint32* aSrc, TUint32* aDest, const TSize aSize ) + { + if ( aSrc && aDest ) + { + Mem::Copy( aDest, aSrc, aSize.iWidth * aSize.iHeight * sizeof( TUint32 ) ); + } + } + +// --------------------------------------------------------------------------- +// Positions the root element and calls itself (recursively) for all the +// descendant elements +// CTM stands for 'Current Transformation Matrix'. +// --------------------------------------------------------------------------- +void CSvgEngineImpl::UpdateCTM(CSvgDocumentImpl* aSvgDocument) + { + + if (aSvgDocument) + { + ((CSvgElementImpl*)aSvgDocument->RootElement())->UpdateCTM(); + } + + + } + +// --------------------------------------------------------------------------- +// Initializes the SVG Engine primarily with width and height informtion +// This is based on the attribute specifications for the root 'svg' element +// --------------------------------------------------------------------------- +void CSvgEngineImpl::InitializeEngineL() + { + // VIEWBOX + // If x, y, w, h of outmost svg not defined, then put default values: 0 0 100% 100% + // return; + // Set locale, so that there is no thousands separator + + if( !iSvgDocument ) + return; + + iSvgDocument->iInitialDrawFlag = ETrue; + if(!((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iIsWidthSet) + { + ((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iIsWidthSet = ETrue; + } + if(!((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iIsHeightSet) + { + ((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iIsHeightSet = ETrue; + } + + TLocale locale; // locale object + locale.SetCurrencyTriadsAllowed( EFalse ); // change setting + TSize lSize = GetSize(); + iSvgDocument->iReqExReqFtrSysLTested = EFalse; + if ( iSvgDocument->RootElement() != NULL && + ((CSvgElementImpl*)iSvgDocument->RootElement())->ElemID() == KSvgSvgElement ) + + { + // Scale width & height to fit to screen size + CSvgSvgElementImpl* el = ( CSvgSvgElementImpl* ) + (iSvgDocument->RootElement()); + TFloatFixPt width, height; + TInt widthInt, heightInt; + TFloatFixPt scrnW( lSize.iWidth ), scrnH( lSize.iHeight ); + TFloatFixPt zero ( 0 ); + + if ( iFrameBufferOverridesViewport ) + { + //special case for Aknicon + //the don't care what the contents viewport is they just want it to scale to the framebuffer's size + width = scrnW; + height= scrnH; + } + else + { + //bitmap from the client overrides width height specified in svg + + if(iViewPortListener != NULL) + { + TInt tempWidth=0,tempHeight=0; + iViewPortListener->GetViewPort( + ((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iWidthInUserCoordinate, + ((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iHeightInUserCoordinate, + ((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iWidthInPercentage, + ((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iHeightInPercentage, + tempWidth, + tempHeight); + + width = (TFloatFixPt) tempWidth; + height = (TFloatFixPt) tempHeight; + + //used in SetWindowViewportTrans of svgSvgElementImpl + iClientDefinedViewPort = ETrue; + + } + else + { + + TReal32 per = 100; + if(((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iWidthInPercentage) + { + width = ( TFloatFixPt ) (( lSize.iWidth/per ) * ((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iWidthInUserCoordinate); + } + else + { + width = (TFloatFixPt) (((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iWidthInUserCoordinate); + } + + if(((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iHeightInPercentage) + { + height = ( TFloatFixPt ) (( lSize.iHeight/per ) * ((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iHeightInUserCoordinate); + } + else + { + height = (TFloatFixPt) (((CSvgSvgElementImpl *)(iSvgDocument->RootElement()))->iHeightInUserCoordinate); + } + + //default to XmidYmid_meet + TSvgPreserveAspectAlignType lPreserverAspectAlignment = ESvgPreserveAspectRatio_XmidYmid; + TSvgMeetOrSliceType lMeetOrSlice = ESvgMeetOrSlice_Meet; + + MSvgPreserveAspectRatio* aPreserveAspectRatio; + el->GetPreserveAspectRatio(aPreserveAspectRatio); + + if (aPreserveAspectRatio) + { + lPreserverAspectAlignment = aPreserveAspectRatio->GetAlign(); + lMeetOrSlice = aPreserveAspectRatio->GetMeetOrSlice(); + + //el->SetPreserveAspectRatioL( lPreserverAspectAlignment, lMeetOrSlice); + if( lPreserverAspectAlignment == ESvgPreserveAspectRatio_None && lMeetOrSlice == ESvgMeetOrSlice_Meet ) + { + width = scrnW; + height = scrnH; + } + } + + if( lMeetOrSlice == ESvgMeetOrSlice_Meet && !(lPreserverAspectAlignment == ESvgPreserveAspectRatio_None) ) + { + widthInt = ( TInt ) width; + heightInt = ( TInt ) height; + + // to avoid division by zero. + TInt rh = lSize.iWidth ; + if (widthInt != 0) + { + rh = heightInt* lSize.iWidth / widthInt; + } + + if ( rh <= lSize.iHeight ) + { + width = scrnW; + height = TFloatFixPt( rh ); + } + else + { + // to avoid division by zero. + if (heightInt != 0) + { + width = TFloatFixPt( ((TReal32)(widthInt * lSize.iHeight)) / heightInt ); + } + height = scrnH; + } + } + else if( lMeetOrSlice == ESvgMeetOrSlice_Slice ) + { + widthInt = ( TInt ) width; + heightInt = ( TInt ) height; + + // to avoid division by zero. + TInt rh = lSize.iWidth ; + if (widthInt != 0) + { + rh = heightInt* lSize.iWidth / widthInt; + } + + if ( rh <= lSize.iHeight ) + { + // to avoid division by zero. + if (heightInt != 0) + { + width = TFloatFixPt( ((TReal32)(widthInt * lSize.iHeight)) / heightInt ); + } + height = scrnH; + + } + else + { + width = scrnW; + height = TFloatFixPt( rh ); + } + } + else + { + } + }//Normal viewer| end of else + } + + if ( ( width <= zero ) || ( height <= zero ) ) //. + { + width = 0; + height = 0; + return; + } + // Set initial viewport + el->SetAttributeFloatL( KAtrX, zero ); + el->SetAttributeFloatL( KAtrY, zero ); + el->SetAttributeFloatL( KAtrWidth, width ); + el->SetAttributeFloatL( KAtrHeight, height ); + } + } + + + + + +// --------------------------------------------------------------------------- +// This method is called after the SVG file is read and all elements are +// constructed +// It also looks for rendering properties such as Anti Aliasing at this +// point +// It calibrates the system for rasterization quality based on contents +// --------------------------------------------------------------------------- +TBool CSvgEngineImpl::StartFrameLoopL() + { + if( iRequestObserver != NULL ) + { + if(iSvgDocument != NULL && iSvgDocument->iEventHandler != NULL) + { + iRequestObserver->UpdatePresentation( + iSvgDocument->iEventHandler->AnimationElementsCount()); + } + } + if(iSvgDocument != NULL) + { + if ( iSvgDocument->RootElement() ) + { + InitializeEngineL(); // set the viewport and viewbox + return ETrue; + } + } + return EFalse; + } +// --------------------------------------------------------------------------- +// UpdatePresentation() +// --------------------------------------------------------------------------- +void CSvgEngineImpl::UpdatePresentation(const TInt32& aParam) + { + if( iRequestObserver != NULL ) + { + iRequestObserver->UpdatePresentation (aParam); + } + } + + +//--------------------------------------------------------------------------- +// SetRenderingQuality +// +// @param : aRenderQuality +// The function is called from JSR226 API. Specific to M2G/JSR226 only. +//--------------------------------------------------------------------------- +void CSvgEngineImpl::SetRenderingQuality( const TInt32 aRenderQuality) +{ + // Bydefault iRenderQuality is set to 2 i.e. Rendering Quality high. + + if( iRenderQuality != aRenderQuality ) + { + iRenderQuality = aRenderQuality; + + if( iGfxContext ) + { + iGfxContext->SetAntialiasingMode( iRenderQuality ); + } + } +} + + +// --------------------------------------------------------------------------- +// Invalidate the current raster (and frame buffer) and +// update the buffer with new raster. +// --------------------------------------------------------------------------- +void CSvgEngineImpl::RedrawL() + { + // Clear the frame buffer + if( iGfxContext && iSvgDocument) + { + // Set Clipping rectangle + CSvgSvgElementImpl* el = ( CSvgSvgElementImpl* ) (iSvgDocument->RootElement()); + if ( !el ) + { + return; // No DOM tree, nothing to draw. + } + + + + // If viewBox has been set and width or height is zero + // Do not render the content + TGfxRectangle2D viewBoxRect; + if(el->GetViewBox(viewBoxRect)) + { + if(viewBoxRect.iWidth == TFloatFixPt(0) || + viewBoxRect.iHeight == TFloatFixPt(0)) + { + return; + } + } + + iGfxContext->SetupContextL(); + iGfxContext->Clear(iBackgroundColor); + iGfxContext->SetFillOpacity( 1.0f ); + iGfxContext->SetStrokeOpacity( 1.0f ); + + TFloatFixPt width, height; + el->GetAttributeFloat( KAtrWidth, width ); + el->GetAttributeFloat( KAtrHeight, height ); + TGfxRectangle2D clipRect ( 0, 0, width, height ); + iGfxContext->SetClip( clipRect ); + iClipRect = clipRect; + + UpdateCTM(iSvgDocument); + + iSvgDocument->iIsRendering = ETrue; + DrawElementsL( (CSvgElementImpl*)iSvgDocument->RootElement()); + iSvgDocument->iIsRendering = EFalse; + + iGfxContext->Flush(); + + // Get the redering result onto CFbsBitmap. + if(iFrameBufferSize.iWidth > 0) + iGfxContext->UpdateFramebufferL( iFrameBuffer, iMask,iFrameBufferSize,iRenderDspMode,iMaskDspMode ); + else + iGfxContext->UpdateFramebufferL( iFrameBuffer, iMask ); + + if ( !iIgnoreUpdateScreen && iRequestObserver != NULL ) + { + iRequestObserver->UpdateScreen(); + } + if ( iSvgDocument->iInitSortList ) + { + iSvgDocument->SortEventList(); + } + else + { + iSvgDocument->iInitSortList=EFalse; + } + } + } + +// --------------------------------------------------------------------------- +// Delete the objects associated with the last loaded SVG file +// --------------------------------------------------------------------------- +void CSvgEngineImpl::Destroy() + { + //if ( iSvgDocument ) + // { + // Stop timer and reset time + // iSvgDocument->TimeContainer()->UserStop(); + // iSvgDocument->TimeContainer()->UserResetTime(); + // } + } + + +// --------------------------------------------------------------------------- +// Set the URI information +// --------------------------------------------------------------------------- +void CSvgEngineImpl::LinkRequest( const TDesC& aUri ) + { + iLinkUri.Set( aUri ); + } +// --------------------------------------------------------------------------- +// Set the Link:Show information +// --------------------------------------------------------------------------- + + +void CSvgEngineImpl::LinkRequestWithShow(const TDesC& aUri ,const TDesC& aLinkShow ) + { + iLinkUri.Set( aUri ); + iLinkShow.Set( aLinkShow ); + } + +// --------------------------------------------------------------------------- +// Initiate the process of getting an svg font from the client +// --------------------------------------------------------------------------- +TBool CSvgEngineImpl::FetchFont( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ) + { + if ( iRequestObserver == NULL ) + { + return EFalse; + } + else + { + if (iRequestObserver->FetchFont( aUri, aSession, aFileHandle ) == KErrNone) + { + return ETrue; + } + return EFalse; + } + } + +// --------------------------------------------------------------------------- +// Initiate the process of getting an embedded image from the client +// --------------------------------------------------------------------------- +TBool CSvgEngineImpl::FetchImage( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ) + { + if ( iRequestObserver == NULL ) + { + return EFalse; + } + else + { + if (iRequestObserver->FetchImage( aUri, aSession, aFileHandle ) == KErrNone) + { + return ETrue; + } + return EFalse; + } + } + +// --------------------------------------------------------------------------- +// Accessor for Graphics Context object +// --------------------------------------------------------------------------- +CGfx2dGc* CSvgEngineImpl::GraphicsContext() + { + return iGfxContext; + } + +// --------------------------------------------------------------------------- +// Accessor for the Engine's current time +// --------------------------------------------------------------------------- +TInt32 CSvgEngineImpl::CurrentTIme() + { + if ( iSvgDocument ) + { + return iSvgDocument->CurrentTime(); + } + return KErrGeneral; + } + + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::ImageLoadingCompleted( TInt /* aErrorStatus */ ) +// --------------------------------------------------------------------------- +// ImageLoadingObserver interface +void CSvgEngineImpl::ImageLoadingCompleted( TInt /* aErrorStatus */ ) +{ + TRAP_IGNORE(RedrawL()); + //aErrorStatus = 0; +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::UpdatePath( CGfxGeneralPath* hPath, CSvgElementImpl* hElement ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::UpdatePath( CGfxGeneralPath* hPath, CSvgElementImpl* hElement ) +{ + if ((hElement != NULL) && (hElement->ElemID() == KSvgPathElement)) + { + TRAPD(error,hElement->SetAttributePathL(KAtrData, hPath)); + if ( error != KErrNone ) + { + // Error Processing + return; + } + } + +} + +// --------------------------------------------------------------------------- +// Accessor for the document object for the currently loaded SVG source +// --------------------------------------------------------------------------- +CSvgDocumentImpl* CSvgEngineImpl::Document() + { + return iSvgDocument; + } + +// --------------------------------------------------------------------------- +// Restrict Thumbnail documents +// Do not render to frame buffer when is in thumbnail mode and +// frame buffer size width or height is larger than 80x80. +// --------------------------------------------------------------------------- +TBool CSvgEngineImpl::PassesThumbNailRestriction() +{ + if ( iSvgDocument && iFrameBuffer && iSvgDocument->IsThumbNailOnly() ) + { + TSize size = iFrameBuffer->SizeInPixels(); + if ( size.iWidth > 80 || size.iHeight > 80 ) + { + return EFalse; + } + } + return ETrue; +} + +//*************************************************************** +// Event handling +// --------------------------------------------------------------------------- +// Initiate the process of handling an event from the client for the +// SVG source +// --------------------------------------------------------------------------- +void CSvgEngineImpl::ProcessEventL( CSvgDocumentImpl* aSvgDocument, + MSvgEvent* aEvent, TBool aRedraw ) + { + // Check for Thumbnail restrictions + if ( !PassesThumbNailRestriction() ) + { + return; + } + + // Timer event + //if(!aEvent || !iGfxContext) + if(!aEvent) + return; + if ( aEvent->EventType() == ESvgEngineEventTimer ) + { + // Update current time + if ( aSvgDocument ) + { + aSvgDocument->SetCurrentTime( + ( ( MSvgTimerEvent * ) aEvent )->Time() ); + } + } + + if( aSvgDocument && aSvgDocument->iEventHandler) + { + if (( aSvgDocument->iEventHandler->ProcessEventL( aEvent ) || + aSvgDocument->iInitialDrawFlag) && aEvent->EventType() == ESvgEngineEventTimer ) + { + + if(aSvgDocument->iInitSortList) + { + aSvgDocument->SortEventList(); + aSvgDocument->iInitSortList = EFalse; + } + aSvgDocument->iInitialDrawFlag = EFalse; + aSvgDocument->iEventHandler->DoAnimProcL(aEvent); + + if (aRedraw) + { + // Redraw is performed for iSvgDocument + RedrawL(); + } + } + else + { + // this is to keep the dom in its final state. + if(aEvent->EventType() == ESvgEngineEventTimer) + { + aSvgDocument->iEventHandler->DoAnimProcL(aEvent); + } + + } + + // Process Link + if ( aEvent->EventMask() == KSvgEventMaskExternalUI ) + { + if ( iLinkUri.Length() > 0 ) + { + DoHyperLinkingL(); + // reset link description + iLinkUri.Set( NullString ); + } + } + } + +// Show FPS debug info. note. only write data to STI port +#ifdef _DEBUG + + if ( aEvent->EventType() == ESvgEngineInternalEvent ) + { + MSvgInternalEvent* evt = ( MSvgInternalEvent* ) aEvent; + if (evt->SvgEvent() == ESvgEventEndEvent) + { + iAnimationState = KAnimFinished; + return; + } + else + if (evt->SvgEvent() == ESvgEventBeginEvent) + { + iAnimationState = KAnimActive; + return; + } + + } + + // time display for debug + if ( iShowDebugInfo && iGfxContext && aEvent->EventType() == ESvgEngineEventTimer + && iAnimationState != KAnimFinished /*&& iTimer*/) + { + TInt fps = iSvgDocument->TimeContainer()->UserFps() / 10; //iTimer->Fps() / 10; + _LIT(msg, "\n%3d.%d\n"); + RDebug::Print(msg, fps, iSvgDocument->TimeContainer()->UserFps() + - fps * 10 ); + + } +#endif //_DEBUG + + } + + +// --------------------------------------------------------------------------- +// This method is for future extension, in which an external script engine +// could be used to evaluate a script description. +// --------------------------------------------------------------------------- +TBool CSvgEngineImpl::ScriptCall( const TDesC& aScript, + CSvgElementImpl* aCallerElement ) + { + if ( iRequestObserver == NULL ) + { + return EFalse; + } + else + { + return iRequestObserver->ScriptCall( aScript, aCallerElement ); + } + } + + +//*************************************************************** +// +// --------------------------------------------------------------------------- +// Obtain the longest duration for an animation given document +// NULL will assume the attached document. +// --------------------------------------------------------------------------- +TUint32 CSvgEngineImpl::Duration( CSvgDocumentImpl* aDocument ) + { + if ( aDocument == NULL ) + { + if ( iSvgDocument == NULL ) + { + return 0; + } + return iSvgDocument->AnimationDuration(); + } + return aDocument->AnimationDuration(); + } + +//*******************************************************/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::SwitchDebugInfo() +// --------------------------------------------------------------------------- +void CSvgEngineImpl::SwitchDebugInfo(TBool debug) + { + iShowDebugInfo = debug; + } + +void CSvgEngineImpl::CustomOption(TBool aCustomOption ) + { + iCustomOption = aCustomOption; + delete iGfxContext; + iGfxContext = NULL; + +/*NGA reverse*/ TRAP_IGNORE( iGfxContext = CGfx2dGcOpenVG::NewL( iFrameBufferSize, iBitmapFontSpec, iSvgBitmapFontProvider )); + + + } + + + + +// --------------------------------------------------------------------------- +// Initiate the process of opening and reading an embedded hyperlink +// --------------------------------------------------------------------------- +void CSvgEngineImpl::DoHyperLinkingL() + { + + if( iSvgDocument == NULL ) + return; + + // Not full support of XPointer + + _LIT( KTmpHttp, "http:" ); + _LIT( KTmpFile, "file:" ); + _LIT( KTmpHash, "#" ); + _LIT( KTmpSvgView, "SvgView" ); + if ( iLinkUri.Left( 1 ) == KTmpHash ) + { + // internal linking + // Extract id + TLex lex ( iLinkUri ); + lex.Inc(); // skip '#' + lex.Mark(); + while ( !lex.Eos() && lex.Peek().IsAlpha() ) + lex.Inc(); + TPtrC targetId = lex.MarkedToken(); + if ( targetId == KTmpSvgView ) + { + // need to parse next token = {viewBoxSpec| preserveAspectRatioSpec + // |transformSpec|zoomAndPanSpec|viewTargetSpec} + + // Not yet supported + } + else + { + + CSvgElementImpl*targetElement = ( CSvgElementImpl* ) + iSvgDocument->GetElementById( targetId ); + if ( targetElement == NULL ) + return; + + if ( targetElement->IsAnimatedElement( ) ) + { + // start animation + ( ( CSvgAnimationBase * ) targetElement )->BeginElementL(); + } + else + { + } + } + } + else if ( iLinkUri.Length() >= 5 ) + { + if ( iLinkUri.Left( 5 ) == KTmpHttp || iLinkUri.Left( 5 ) == KTmpFile ) + { + // notify observer of desire to follow http link + NotifyHyperlinkActivated( iLinkUri ); + } + else + { + // notify observer of desire to follow link + if ( iLinkShow.Length() > 0 ) + NotifyHyperlinkActivatedWithShow( iLinkUri, iLinkShow ); + else + NotifyHyperlinkActivated( iLinkUri ); + } + } + else if ( iLinkUri.Length() > 0 ) + { + // notify observer of desire to follow link + if ( iLinkShow.Length() > 0 ) + NotifyHyperlinkActivatedWithShow( iLinkUri, iLinkShow ); + else + NotifyHyperlinkActivated( iLinkUri ); + } + } + +// --------------------------------------------------------------------------- +// Dump a completed raster to the off screen buffer provided by the +// client +// --------------------------------------------------------------------------- +TInt CSvgEngineImpl::RenderFileToBuffer( const TDesC8& aSvgData, + CFbsBitmap* aFrameBuffer, + CFbsBitmap* aMask, + TBool aPreserveAspectRatio ) + { + if ( !iGfxContext ) + { + return EFalse; + } + + CFbsBitmap* OrgFrameBuffer; + CFbsBitmap* OrgMask; + OrgFrameBuffer = iFrameBuffer; + OrgMask = iMask; + CSvgDocumentImpl* lsvgorgdoc = iSvgDocument; + // We have moved all the leaving functions into RenderFileL + TRAPD(err,RenderFileL(aSvgData,aFrameBuffer,aMask,aPreserveAspectRatio)); + // No matter what...whether the RenderFileL returns properly or leave we need to set the + //GDI context back to the original frame buffer and mask... and set back the engine to + //how it was before all this happened.. + + SetDocument(lsvgorgdoc); + lsvgorgdoc->SetEngine(this); + // the setGDIContextL error is a very serious error and if it occurs then + // there is no way of recovery. + TRAP_IGNORE(SetGdiContextL(OrgFrameBuffer,OrgMask)); + //So we are propagating the more probable error of the two which is the leaving of + // RenderFileL. + return err; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// Helper leaving function for the function RenderFileToBuffer. +// The actual rendering happens in this function..while the calling function uses this to +// render the file. +// --------------------------------------------------------------------------- + + +void CSvgEngineImpl::RenderFileL( const TDesC8& aSvgData, + CFbsBitmap* aFrameBuffer, + CFbsBitmap* aMask, + TBool aPreserveAspectRatio) + +{ + CFont *lFont = iGfxContext->Font(); + TFontSpec lFontSpec = lFont->FontSpecInTwips(); + + TSize imageSize; + imageSize = aFrameBuffer->SizeInPixels(); + //iFrameBuffer = aFrameBuffer; + + SetGdiContextL(aFrameBuffer, aMask); + CSvgDocumentImpl* lSvgDocument = CSvgDocumentImpl::NewLC(iSvgBitmapFontProvider); + SetDocument(lSvgDocument); + lSvgDocument->SetEngine(this); + + // fileHandle is valid from client + lSvgDocument->Load( aSvgData, *iSvgError ); + if ( iSvgError->HasError() && !iSvgError->IsWarning() ) + { + CleanupStack::PopAndDestroy(1); + return; + } + + StartFrameLoopL(); + CSvgSvgElementImpl* lRoot = (CSvgSvgElementImpl*)lSvgDocument->RootElement(); + _LIT( KPreserveAspectRatio, "preserveAspectRatio" ); + + if(lRoot) + { + if ( aPreserveAspectRatio ) + { + _LIT( KXMidYMid, "xMidYMid" ); + lRoot->SetAttributeL( KPreserveAspectRatio, KXMidYMid ); + lRoot->SetWidth( imageSize.iWidth ); + lRoot->SetHeight( imageSize.iHeight ); + } + else { + _LIT( KNone, "none" ); + lRoot->SetAttributeL( KPreserveAspectRatio, KNone ); + lRoot->SetWidth( imageSize.iWidth ); + lRoot->SetHeight( imageSize.iHeight ); + } + RedrawL(); + } + CleanupStack::PopAndDestroy( 1 ); +} + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// Generate a mask bitmap from alpha channel of the framebuffer. +// --------------------------------------------------------------------------- +void CSvgEngineImpl::GenerateMask(CFbsBitmap* aMask) + { + if ( iGfxContext ) + { + iGfxContext->GenerateMask( aMask ); + } + } + +// +// --------------------------------------------------------------------------- +// set background color +// --------------------------------------------------------------------------- +void CSvgEngineImpl::SetBackgroundColor(TUint32 aRGBA8888Color) + { + iBackgroundColor = aRGBA8888Color; + } + +// +// --------------------------------------------------------------------------- +// Get Size of render buffer +// --------------------------------------------------------------------------- +TSize CSvgEngineImpl::GetSize() + { + return iFrameBufferSize; + + + + } + + +// +// --------------------------------------------------------------------------- +// Return SVG Engine State +// --------------------------------------------------------------------------- + +TSvgEngineState CSvgEngineImpl::SVGEngineState() + { + return iSvgEngineState; + } + +// +// --------------------------------------------------------------------------- +// Set SVG Engine State +// --------------------------------------------------------------------------- + +void CSvgEngineImpl::SetSVGEngineState(TSvgEngineState aState) + { + iSvgEngineState = aState; + if( iSvgEngineState == ESVGEnginePaused ) + { + if ( iSvgDocument ) + { + iSvgDocument->TimeContainer()->UserPause(); + NotifyAnimationPaused(); + } + } + else if( iSvgEngineState == ESVGEngineRunning ) + { + if (iSvgDocument && iSvgDocument->IsAnimationFile()) + { + iSvgDocument->TimeContainer()->UserResume(); + } + } + else if(iSvgEngineState == ESVGEngineStopped ) + { + if ( iSvgDocument ) + { + iSvgDocument->TimeContainer()->UserStop(); + } + + } + } + +void CSvgEngineImpl::SeekEngine( TUint32 aTime) + { + iSvgEngineState = ESVGEngineRunning; + if ( iSvgDocument ) + { + iSvgDocument->TimeContainer()->UserSeek( aTime ); + } + } + +void CSvgEngineImpl::ResetTimer() + { + if ( iSvgDocument ) + { + iSvgDocument->TimeContainer()->UserResetTime(); + } + } + +// --------------------------------------------------------------------------- +// SetGdiContext File +// --------------------------------------------------------------------------- + +void CSvgEngineImpl::SetGdiContextL(CFbsBitmap* aCurrentBitmap, CFbsBitmap* aMask) + { + // Handle for both Non-NULL and NULL parameter + iFrameBuffer = aCurrentBitmap; + iMask = aMask; + + if ( aCurrentBitmap ) + { + if ( !iGfxContext ) + { + iGfxContext = CGfx2dGcOpenVG::NewL( iFrameBuffer->SizeInPixels(), iBitmapFontSpec, iSvgBitmapFontProvider ); + + // The API is called Only in case of JSR226. Incase if the midlet developer + // has changed the RedenderQuality of the midlet.ByDefualt the value of + // iRenderQuality is 2 i.e. VG_RENDERING_QUALITY_BETTER. + iGfxContext->SetAntialiasingMode( iRenderQuality ); + } + else + { + iGfxContext->ChangeBufferSizeL( iFrameBuffer->SizeInPixels() ); + } + } + else if ( iGfxContext ) + { + iGfxContext->ChangeBufferSizeL( TSize( 0,0 ) ); + } + } + +// --------------------------------------------------------------------------- +// void CSvgEngineImpl::StartEngine(CSvgErrorImpl* aError) +// --------------------------------------------------------------------------- + +void CSvgEngineImpl::StartEngine(CSvgErrorImpl* aError) + { + if ( !iFrameBuffer || !iSvgDocument ) + { + return; + } + + iMouseoverElement = NULL; + if ( ((iFrameBufferSize.iHeight <= 0 )||(iFrameBufferSize.iWidth <= 0 )) &&(( iFrameBuffer->SizeInPixels().iWidth == 0 ) || + ( iFrameBuffer->SizeInPixels().iHeight == 0) )) + { + return; + } + + TBool initialized = EFalse; + + TRAPD( initError, initialized = StartFrameLoopL() ); + + if ( initError != KErrNone || !initialized ) + { + return; + } + + // Get the Engine State to Running + SetSVGEngineState(ESVGEngineRunning); + + // Document is an animation + if( iSvgDocument->IsAnimationFile() ) + { + { // Mahesh: Atleast first frame should get drawn + TRAPD(error, RedrawL() ); + { + if ( error != KErrNone && aError != NULL ) + { + if( error == KErrNoMemory ) + { + CSvgDocumentImpl::PrepareError( *aError, ESvgNoMemory, error, + _L( "Unable to Draw: " ), + _L( "" ) ); + return; + } + + CSvgDocumentImpl::PrepareError( *aError, ESvgUnknown, error, + _L( "Unable to Draw: " ), + _L( "" ) ); + return; + } + } + + } + + iSvgDocument->TimeContainer()->UserPlay(); + iSvgDocument->iAnimationResetNeeded = ETrue; + } + // Static svg file + else + { + TRAPD(error, RedrawL() ); + { + if ( error != KErrNone && aError != NULL ) + { + if( error == KErrNoMemory ) + { + CSvgDocumentImpl::PrepareError( *aError, ESvgNoMemory, error, + _L( "Unable to Draw: " ), + _L( "" ) ); + return; + } + + CSvgDocumentImpl::PrepareError( *aError, ESvgUnknown, error, + _L( "Unable to Draw: " ), + _L( "" ) ); + return; + } + } + } + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::RenderFrame( TUint aCurrentTime ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::RenderFrame( TUint aCurrentTime ) + { + if ( !iFrameBuffer || !iSvgDocument || + iFrameBuffer->SizeInPixels().iWidth == 0 || iFrameBuffer->SizeInPixels().iHeight == 0 ) + { + return; + } + + if ( aCurrentTime == 0 ) + { + SeekEngine( 0 ); + } + + iMouseoverElement = NULL; + + CSvgSvgElementImpl* rootElement = (CSvgSvgElementImpl*)iSvgDocument->RootElement(); + + if (rootElement == NULL) + { + return; + } + + TGfxRectangle2D viewBoxRect; + if (rootElement->GetViewBox(viewBoxRect)) + { + //viewbox has been defined or set already + if (viewBoxRect.iWidth == TFloatFixPt(0) || viewBoxRect.iHeight == TFloatFixPt(0)) + { + //viewbox has no area so dont render + return; + } + } + + if( iRequestObserver && iSvgDocument->iEventHandler ) + { + iRequestObserver->UpdatePresentation( iSvgDocument->iEventHandler->AnimationElementsCount() ); + } + + iSvgDocument->iInitialDrawFlag = ETrue; + + // Fix for animation element for testApp + TSvgTick lTick; + lTick.iRealTimeTick = aCurrentTime; + lTick.iParentTcTick = 0; + iSvgDocument->TimeContainer()->ParentTimeContainerTick(lTick) ; + // Fix for animation element for testApp + } + + +// --------------------------------------------------------------------------- +// Set SvgEngine Document +// --------------------------------------------------------------------------- +void CSvgEngineImpl::SetDocument(CSvgDocumentImpl* aDocument) + { + iSvgDocument = aDocument; + } + + +// --------------------------------------------------------------------------- +// Change the duration of the timer +// --------------------------------------------------------------------------- +void CSvgEngineImpl::ChangeDuration( TUint32 aTimerDuration ) + { + if ( iSvgDocument ) + { + iSvgDocument->TimeContainer()->UserChangeFrameDuration( + aTimerDuration ); + + // Check if there is animation element in the parent svg + RPointerArray lAnimationEleList; + iSvgDocument->FindAllElements((CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgMediaAnimationElement, lAnimationEleList ); + TInt lAnimationEleCnt = lAnimationEleList.Count(); + for ( TInt lCurAnimationEle = 0; + lCurAnimationEle < lAnimationEleCnt; lCurAnimationEle++ ) + { + CSvgMediaAnimationElementImpl* lAnimationElement = + (CSvgMediaAnimationElementImpl* )lAnimationEleList[ lCurAnimationEle ]; + CSvgDocumentImpl* lChildDoc = lAnimationElement->GetChildDocument(); + if ( lChildDoc ) + { + lChildDoc->TimeContainer()->UserChangeFrameDuration( + aTimerDuration ); // Change Frame duration for child svg + } + } + lAnimationEleList.Close(); + } + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::Resume(TInt32 aTime) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::Resume(TInt32 aTime) + { + if ( iSvgDocument ) + { + iSvgDocument->TimeContainer()->UserResume( aTime ); + } + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::FindBBoxesForRotatedText( const TDesC& aSearchString, +// --------------------------------------------------------------------------- +void CSvgEngineImpl::FindBBoxesForRotatedText( const TDesC& aSearchString, + RPointerArray& aBoundingBoxes, + RArray& aTexts, + RArray& aElementIds, + TBool aCaseSensitive ) +{ + if ( iSvgDocument == NULL ) + return; + + if ( iSvgTextBoundingBoxes.Count() > 0 ) + { + iSvgTextBoundingBoxes.ResetAndDestroy(); + } + + // Find all text elements + HBufC* searchStr = aSearchString.AllocLC(); + TPtr searchStrPtr = searchStr->Des(); + RPointerArray textElements; + iSvgDocument->FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgTextElement, textElements ); + // Himanshu: Find all animation elements + RPointerArray lAllAnimationElements; + iSvgDocument->FindAllElements( (CSvgElementImpl*)iSvgDocument->RootElement(), + KSvgMediaAnimationElement, + lAllAnimationElements ); + TInt lAllAnimationEleCnt = lAllAnimationElements.Count(); + for ( TInt i = 0; i < lAllAnimationEleCnt; i++ ) + { + CSvgMediaAnimationElementImpl* element = (CSvgMediaAnimationElementImpl*)lAllAnimationElements[i]; + CSvgDocumentImpl* ldoc = element->GetChildDocument(); + if(ldoc) + { + // Find all text elements in child document + ldoc->FindAllElements( (CSvgElementImpl*)ldoc->RootElement(), + KSvgTextElement, + textElements ); + } + + } + lAllAnimationElements.Close(); + + TSvgFourPointRect boundingBox; + TInt textEleCnt = textElements.Count(); + for ( TInt i = 0; i < textEleCnt; i++ ) + { + CSvgTextElementImpl* textElement = (CSvgTextElementImpl*)textElements[i]; + TPtrC remainder( textElement->GetText() ); + + TInt index = ( aCaseSensitive ) ? remainder.Find( aSearchString ) : + remainder.FindF( aSearchString ); + + // continue to next element if nothing found + if ( index == KErrNotFound ) + continue; + + searchStrPtr.Copy( remainder.Mid(index,aSearchString.Length()) ); + // Get the bounding box for the whole text element + textElement->GetFourPointBBox( boundingBox ); + + // Get bounding box for every occurrence + TReal32 textAdvance = (TReal32)(textElement->TextAdvance( *searchStr, index )); + TReal32 leftAdvance = 0.0f; + //TReal32 aHeight = textElement->Ascent() + textElement->Descent(); + + while ( index != KErrNotFound ) + { + // Calculate boundingbox for searched-text + // indeterminate results with a string only one character long + leftAdvance = leftAdvance + (TReal32)(textElement->TextAdvance( remainder.Left( index ))); + + // need to setup slope calculation here to determine where the new + // four point rect should be for partial pieces of text + + // need to do something for both vertical and horizontal text 0 and na slopes + + TReal32 dy = (TReal32)boundingBox.iPoint2.iY - (TReal32)boundingBox.iPoint1.iY; + TReal32 dx = (TReal32)boundingBox.iPoint2.iX - (TReal32)boundingBox.iPoint1.iX; + + double aSlopeRan; + Math::ATan(aSlopeRan, dy, dx); + + double aSinVal; + Math::Sin(aSinVal, aSlopeRan); + + double aCosVal; + Math::Cos(aCosVal, aSlopeRan); + + + TReal32 x1 = aCosVal * leftAdvance + (TReal32)boundingBox.iPoint1.iX; + TReal32 x3 = aCosVal * leftAdvance + (TReal32)boundingBox.iPoint3.iX; + TReal32 y1 = aSinVal * leftAdvance + (TReal32)boundingBox.iPoint1.iY; + TReal32 y3 = aSinVal * leftAdvance + (TReal32)boundingBox.iPoint3.iY; + + TReal32 x2 = aCosVal * textAdvance + x1; + TReal32 x4 = aCosVal * textAdvance + x3; + + TReal32 y2 = aSinVal * textAdvance + y1; + TReal32 y4 = aSinVal * textAdvance + y3; + + TSvgFourPointRect* bbox = NULL; + + TRAP_IGNORE( bbox = new (ELeave) TSvgFourPointRect( TPoint(x1, y1), + TPoint(x2, y2), + TPoint(x3, y3), + TPoint(x4, y4)) ); + + if ( !bbox ) + { + #ifdef _DEBUG + RDebug::Printf("Four Point Rect Failed: Out of Memory"); + #endif + return; + } + + // store bound box pointers to go back to client + aBoundingBoxes.Append( (MRect*)bbox ); + + iSvgTextBoundingBoxes.Append( bbox ); + + // store point to text + aTexts.Append( TPtrC( textElement->GetText() ) ); + aElementIds.Append( (TInt)textElement ); + + remainder.Set( remainder.Right( remainder.Length() - index - aSearchString.Length() ) ); + leftAdvance = leftAdvance + textAdvance; + index = ( aCaseSensitive ) ? remainder.Find( aSearchString ) : + remainder.FindF( aSearchString ); + } + } + CleanupStack::PopAndDestroy(searchStr); + textElements.Close(); +} + +//this is the old 2point rect way that only works for horizontal text +/*void CSvgEngineImpl::FindBBoxesForHorizontalText( const TDesC& aSearchString, + RArray& aBoundingBoxes, + RArray& aTexts, + RArray& aElementIds, + TBool aCaseSensitive ) +{ + if ( iSvgDocument == NULL ) + return; + + // Find all text elements + RPointerArray textElements; + iSvgDocument->FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgTextElement, textElements ); + + TGfxRectangle2D boundingBox; + for ( TInt i = 0; i < textElements.Count(); i++ ) + { + CSvgTextElementImpl* textElement = (CSvgTextElementImpl*)textElements[i]; + TPtrC remainder( textElement->GetText() ); + + TInt index = ( aCaseSensitive ) ? remainder.Find( aSearchString ) : + remainder.FindF( aSearchString ); + + // continue to next element if nothing found + if ( index == KErrNotFound ) + continue; + + // Get the bounding box for the whole text element + textElement->GetBBox( boundingBox ); + + // Get bounding box for every occurrence + TFloatFixPt textAdvance = textElement->TextAdvance( aSearchString, index ); + TFloatFixPt leftAdvance = 0.0f; + while ( index != KErrNotFound ) + { + // Calculate boundingbox for searched-text + leftAdvance = leftAdvance + textElement->TextAdvance( remainder.Left( index ), index ); + + TRect bbox( (TInt)boundingBox.iX + (TInt)leftAdvance, + (TInt)boundingBox.iY, + (TInt)boundingBox.iX + (TInt)leftAdvance + (TInt)textAdvance, + (TInt)boundingBox.iY + (TInt)boundingBox.iHeight ); + + // store bound box + aBoundingBoxes.Append( bbox ); + + // store point to text + aTexts.Append( TPtrC( textElement->GetText() ) ); + aElementIds.Append( (TInt)textElement ); + + remainder.Set( remainder.Right( remainder.Length() - index - aSearchString.Length() ) ); + leftAdvance = leftAdvance + textAdvance; + index = ( aCaseSensitive ) ? remainder.Find( aSearchString ) : + remainder.FindF( aSearchString ); + } + } + textElements.Close(); +} +*/ + +/************************ HyperLinking Functions ***********************/ + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::CheckForHyperlinkMouseover( TInt aX, TInt aY ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::CheckForHyperlinkMouseover( TInt aX, TInt aY ) +{ + if ( iHyperlinkListeners.Count() == 0 ) + return; + + if ( iSvgDocument == NULL ) + return; + + // Gather elements if first time + RPointerArray iAElementList; + if ( iAElementList.Count() == 0 ) + { + iSvgDocument->FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgAElement, iAElementList ); + } + + // find the bounding box containing point + TGfxPoint2D point( aX, aY ); + TGfxRectangle2D boundingBox; + TInt aEleListCnt = iAElementList.Count(); + for ( TInt i = 0; i < aEleListCnt; i++ ) + { + CSvgElementImpl* element = iAElementList[i]; + CSvgGElementImpl::GetGroupBounding( boundingBox, element ); + if ( boundingBox.Contains( point ) ) + { + // no existing mouse over element: notify HyperlinkEntered + if ( iMouseoverElement == NULL ) + { + NotifyHyperlinkEntered( element->Href() ); + } + // otherwise: notify HyperlinkExited, HyperlinkEntered + else if ( iMouseoverElement != element ) + { + NotifyHyperlinkExited( iMouseoverElement->Href() ); + NotifyHyperlinkEntered( element->Href() ); + } + iMouseoverElement = element; + return; + } + } + + // no bounding box containing point: notify HyperlinkExited + if ( iMouseoverElement != NULL ) + { + NotifyHyperlinkExited( iMouseoverElement->Href() ); + iMouseoverElement = NULL; + } + + iAElementList.Close(); +} + +/*-------------------------Animation Listeners-----------------------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::AddAnimationListener( MSvgAnimationListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::AddAnimationListener( MSvgAnimationListener* aListener ) +{ + if ( aListener != NULL && iAnimationListeners.Find( aListener ) == KErrNotFound ) + iAnimationListeners.Append( aListener ); + +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::RemoveAnimationListener( MSvgAnimationListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::RemoveAnimationListener( MSvgAnimationListener* aListener ) +{ + TInt index = iAnimationListeners.Find( aListener ); + if ( index != KErrNotFound ) + iAnimationListeners.Remove( index ); +} + +/*-------------------------Animation listener notification to client-------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyAnimationStarted() +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyAnimationStarted() +{ + + TBool isAnimationIndefinite = EFalse; + if ( ( iSvgDocument == NULL ) || ( iSvgDocument->RootElement() == NULL ) || + ( iAnimationListeners.Count() == 0 ) ) + { + return; + } + + RPointerArray AnimationElementList; + + iSvgDocument->FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgSetElement, AnimationElementList ); + iSvgDocument->FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgAnimateElement, AnimationElementList ); + iSvgDocument->FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgAnimateMotionElement, AnimationElementList ); + iSvgDocument->FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgAnimateTransformElement, AnimationElementList ); + iSvgDocument->FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgAnimateColorElement, AnimationElementList ); + + if ( AnimationElementList.Count() != 0 ) + { + TInt animationEleListCnt = AnimationElementList.Count(); + for ( TInt i=0; i < animationEleListCnt; i++ ) + { + CSvgElementImpl * element = AnimationElementList[i]; + if ( ((CSvgAnimationBase *)element)->CompleteDuration() == KTimeIndefinite ) + { + isAnimationIndefinite = ETrue; + break; + } + } + + } + AnimationElementList.Close(); + + TInt animationListenersCnt = iAnimationListeners.Count(); + for ( TInt i = 0; i < animationListenersCnt; i++ ) + iAnimationListeners[i]->AnimationStarted( isAnimationIndefinite ); + + +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyAnimationPaused() +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyAnimationPaused() +{ + TInt animationListenersCnt = iAnimationListeners.Count(); + for ( TInt i = 0; i < animationListenersCnt; i++ ) + iAnimationListeners[i]->AnimationPaused(); +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyAnimationEnded() +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyAnimationEnded() +{ + if ( ( iSvgDocument == NULL ) || ( iSvgDocument->RootElement() == NULL ) || + ( iAnimationListeners.Count() == 0 ) ) + { + return; + } + #if 0 + RPointerArray AnimationElementList; + + FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgSetElement, AnimationElementList ); + FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgAnimateElement, AnimationElementList ); + FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgAnimateMotionElement, AnimationElementList ); + FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgAnimateTransformElement, AnimationElementList ); + FindAllElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgAnimateColorElement, AnimationElementList ); + + if ( AnimationElementList.Count() != 0 ) + { + TInt animationEleListCnt = AnimationElementList.Count(); + for ( TInt i=0; i < animationEleListCnt; i++ ) + { + CSvgElementImpl * element = AnimationElementList[i]; + if ( ((CSvgAnimationBase *)element)->iAnimStatus == KAnimActive ) + { + AnimationElementList.Close(); + return; + } + } + + } + AnimationElementList.Close(); +#endif + + TInt animationListenersCnt = iAnimationListeners.Count(); + for ( TInt i = 0; i < animationListenersCnt; i++ ) + iAnimationListeners[i]->AnimationEnded(); + +} + +/*------------------Register Client Text Area listeners----------------------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::AddTextAreaListener( MSvgTextAreaListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::AddTextAreaListener( MSvgTextAreaListener* aListener ) +{ + if ( aListener != NULL && iTextAreaListeners.Find( aListener ) == KErrNotFound ) + { + iTextAreaListeners.Append( aListener ); + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::RemoveTextAreaListener( MSvgTextAreaListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::RemoveTextAreaListener( MSvgTextAreaListener* aListener ) +{ + TInt index = iTextAreaListeners.Find( aListener ); + if ( index != KErrNotFound ) + { + iTextAreaListeners.Remove( index ); + } +} + +/*----------------Text Area listener notification to client--------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyTextAreaEntered( CSvgTextAreaElementImpl* aTextAreaHandle ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyTextAreaEntered( CSvgTextAreaElementImpl* aTextAreaHandle ) +{ + TInt textAreaListenersCnt = iTextAreaListeners.Count(); + for (TInt i=0; i < textAreaListenersCnt; i++) + { + iTextAreaListeners[i]->TextAreaEntered( (TInt)aTextAreaHandle); + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyTextAreaExited( CSvgTextAreaElementImpl* aTextAreaHandle ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyTextAreaExited( CSvgTextAreaElementImpl* aTextAreaHandle ) +{ + TInt textAreaListenersCnt = iTextAreaListeners.Count(); + for (TInt i=0; i < textAreaListenersCnt; i++) + { + iTextAreaListeners[i]->TextAreaExited( (TInt)aTextAreaHandle); + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyTextAreaActivated( CSvgTextAreaElementImpl* aTextAreaHandle ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyTextAreaActivated( CSvgTextAreaElementImpl* aTextAreaHandle ) +{ + TInt textAreaListenersCnt = iTextAreaListeners.Count(); + for (TInt i=0; i < textAreaListenersCnt; i++) + { + iTextAreaListeners[i]->TextAreaActivated( (TInt)aTextAreaHandle ); + } +} + +/*------------------Register Client Text listeners----------------------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::AddTextListener( MSvgTextListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::AddTextListener( MSvgTextListener* aListener ) +{ + if ( aListener != NULL && iTextListeners.Find( aListener ) == KErrNotFound ) + { + iTextListeners.Append( aListener ); + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::RemoveTextListener( MSvgTextListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::RemoveTextListener( MSvgTextListener* aListener ) +{ + TInt index = iTextListeners.Find( aListener ); + if ( index != KErrNotFound ) + { + iTextListeners.Remove( index ); + } +} + +/*----------------Text listener notification to client--------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyTextEntered( CSvgTextElementImpl* aTextHandle ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyTextEntered( CSvgTextElementImpl* aTextHandle ) +{ + TInt textListenersCnt = iTextListeners.Count(); + for (TInt i=0; i < textListenersCnt; i++) + { + iTextListeners[i]->TextEntered( (TInt)aTextHandle); + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyTextExited( CSvgTextElementImpl* aTextHandle ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyTextExited( CSvgTextElementImpl* aTextHandle ) +{ + TInt textListenersCnt = iTextListeners.Count(); + for (TInt i=0; i < textListenersCnt; i++) + { + iTextListeners[i]->TextExited( (TInt)aTextHandle); + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyTextActivated( CSvgTextElementImpl* aTextHandle ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyTextActivated( CSvgTextElementImpl* aTextHandle ) +{ + TInt textListenersCnt = iTextListeners.Count(); + for (TInt i=0; i < textListenersCnt; i++) + { + iTextListeners[i]->TextActivated( (TInt)aTextHandle ); + } +} + +/*---------------------Register Client Hyperlink listeners----------------------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::AddHyperlinkListener( MSvgHyperlinkListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::AddHyperlinkListener( MSvgHyperlinkListener* aListener ) +{ + if ( aListener != NULL && iHyperlinkListeners.Find( aListener ) == KErrNotFound ) + iHyperlinkListeners.Append( aListener ); +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::RemoveHyperlinkListener( MSvgHyperlinkListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::RemoveHyperlinkListener( MSvgHyperlinkListener* aListener ) +{ + TInt index = iHyperlinkListeners.Find( aListener ); + if ( index != KErrNotFound ) + iHyperlinkListeners.Remove( index ); +} + +void CSvgEngineImpl::AddViewPortListener(MSvgViewPortListener* aListener) +{ + if ( aListener != NULL ) + { + iViewPortListener = aListener ; + } + +} + + +void CSvgEngineImpl::RemoveViewPortListener(MSvgViewPortListener* + /* aListener */ ) +{ + if(iViewPortListener != NULL) + { + iViewPortListener = NULL; + } +} +/*----------------Hyperlink listener notification to client--------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyHyperlinkEntered( CSvgAElementImpl* aAElementHandle ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyHyperlinkEntered( CSvgAElementImpl* aAElementHandle ) +{ + TInt hyperLinkListenersCnt = iHyperlinkListeners.Count(); + for ( TInt i = 0; i < hyperLinkListenersCnt; i++ ) + { + if (aAElementHandle) + { + iHyperlinkListeners[i]->LinkEntered( aAElementHandle->Href() ); + } + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyHyperlinkEntered( const TDesC& aUri ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyHyperlinkEntered( const TDesC& aUri ) +{ + TInt hyperLinkListenersCnt = iHyperlinkListeners.Count(); + for ( TInt i = 0; i < hyperLinkListenersCnt; i++ ) + { + iHyperlinkListeners[i]->LinkEntered( aUri ); + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyHyperlinkExited( CSvgAElementImpl* aAElementHandle ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyHyperlinkExited( CSvgAElementImpl* aAElementHandle ) +{ + TInt hyperLinkListenersCnt = iHyperlinkListeners.Count(); + for ( TInt i = 0; i < hyperLinkListenersCnt; i++ ) + { + if (aAElementHandle) + { + iHyperlinkListeners[i]->LinkExited( aAElementHandle->Href() ); + } + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyHyperlinkExited( const TDesC& aUri ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyHyperlinkExited( const TDesC& aUri ) +{ + TInt hyperLinkListenersCnt = iHyperlinkListeners.Count(); + for ( TInt i = 0; i < hyperLinkListenersCnt; i++ ) + { + iHyperlinkListeners[i]->LinkExited( aUri ); + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyHyperlinkActivated( CSvgAElementImpl* aAElementHandle ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyHyperlinkActivated( CSvgAElementImpl* aAElementHandle ) +{ + if ( !aAElementHandle || + aAElementHandle->Href().Length() == 0 || + aAElementHandle->Href()[0] == '#' ) + { + return; + } + + TInt hyperLinkListenersCnt = iHyperlinkListeners.Count(); + for ( TInt i = 0; i < hyperLinkListenersCnt; i++ ) + { + iHyperlinkListeners[i]->LinkActivated( aAElementHandle->Href() ); + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyHyperlinkActivated( const TDesC& aUri ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyHyperlinkActivated( const TDesC& aUri ) +{ + TInt hyperLinkListenersCnt = iHyperlinkListeners.Count(); + for ( TInt i = 0; i < hyperLinkListenersCnt; i++ ) + { + iHyperlinkListeners[i]->LinkActivated( aUri ); + } +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyHyperlinkActivatedWithShow( const TDesC& aUri, const TDesC& aShow ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyHyperlinkActivatedWithShow( const TDesC& aUri, const TDesC& aShow ) +{ + TInt hyperLinkListenersCnt = iHyperlinkListeners.Count(); + for ( TInt i = 0; i < hyperLinkListenersCnt; i++ ) + iHyperlinkListeners[i]->LinkActivatedWithShow( aUri, aShow ); +} + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyElementActivatedLinkEntered( CSvgElementImpl* aElement) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyElementActivatedLinkEntered( CSvgElementImpl* aElement) + { + if(iMouseoverElement == NULL) + { + const TDesC* myId = aElement->Id(); + + if (myId) + NotifyHyperlinkEntered( *(myId)); + iMouseoverElement = aElement; + } + } +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyElementActivatedLinkExited( CSvgElementImpl* aElement) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyElementActivatedLinkExited( CSvgElementImpl* aElement) + { + if(iMouseoverElement == aElement ) + { + const TDesC* myId = aElement->Id(); + + if (myId) + NotifyHyperlinkExited( *(myId)); + iMouseoverElement = NULL; + } + } +void CSvgEngineImpl::GetViewPort(TInt getWidth, TInt getHeight, TBool isWidthInPer, TBool isHeightInPer, TInt &setWidth, TInt &setHeight) +{ + if(iViewPortListener != NULL) + { + iViewPortListener->GetViewPort(getWidth, getHeight, isWidthInPer, isHeightInPer, setWidth, setHeight); + } +} + +/*------------------Register Client Interactive Element listeners------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::AddInteractiveElementListener( +// MSvgInteractiveElementListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::AddInteractiveElementListener( + MSvgInteractiveElementListener* aListener ) + { + if ( + aListener != NULL && + iInteractiveElementListeners.Find( aListener ) == KErrNotFound ) + { + iInteractiveElementListeners.Append( aListener ); + } + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::RemoveInteractiveElementListener( +// MSvgInteractiveElementListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::RemoveInteractiveElementListener( + MSvgInteractiveElementListener* aListener ) + { + TInt index = iInteractiveElementListeners.Find( aListener ); + if ( index != KErrNotFound ) + { + iInteractiveElementListeners.Remove( index ); + } + } + +/*-----------Interactive Element listener notification to client------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyInteractiveElementEntered(CSvgElementImpl* aElement) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyInteractiveElementEntered( + CSvgElementImpl* aElement) + { + TUint16 lsubeventmask=0; + TBool linteractivity; + linteractivity=this->iSvgDocument->iEventHandler-> + CheckInteractivityAndGetSubEventMask(aElement,lsubeventmask); + if(linteractivity) + { + TInt linteractiveElementListenersCnt = iInteractiveElementListeners.Count(); + for ( TInt i = 0; i < linteractiveElementListenersCnt; i++ ) + { + const TDesC* myId = aElement->Id(); + TPtrC16 ptr; + if(myId) + { + ptr.Set(*myId); + } + else + { + _LIT(KEmptyString,""); + ptr.Set( KEmptyString); + } + iInteractiveElementListeners[i]->InteractiveElementEntered( + ptr,lsubeventmask ); + } + } + } +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyInteractiveElementExited(CSvgElementImpl* aElement) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyInteractiveElementExited(CSvgElementImpl* aElement) + { + TInt linteractiveElementListenersCnt = iInteractiveElementListeners.Count(); + for ( TInt i = 0; i < linteractiveElementListenersCnt; i++ ) + { + const TDesC* myId = aElement->Id(); + TPtrC16 ptr; + if(myId) + { + ptr.Set(*myId); + } + else + { + _LIT(KEmptyString,""); + ptr.Set(KEmptyString); + } + iInteractiveElementListeners[i]->InteractiveElementExited(ptr); + } + } + +// --------------------------------------------------------------------------- +// Set SVG Dimension to frame buffer size +// --------------------------------------------------------------------------- +void CSvgEngineImpl::SetSvgDimensionToFrameBufferL(TUint aWidth, TUint aHeight) + { + if (iSvgDocument == NULL ) return; + if (iSvgDocument->RootElement() != NULL) + { + CSvgElementImpl* theElement = (CSvgElementImpl*)(iSvgDocument->RootElement()); + ((CSvgSvgElementImpl*)theElement)->iWidthInUserCoordinate = 0; + ((CSvgSvgElementImpl*)theElement)->iHeightInUserCoordinate = 0; + TFloatFixPt wFix( (TInt)aWidth ); + TFloatFixPt hFix( (TInt)aHeight ); + theElement->SetAttributeFloatL(KAtrWidth, wFix ); + theElement->SetAttributeFloatL(KAtrHeight, hFix ); + } + + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::SetMediaTime(TUint32 aTimeInMilliSeconds) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::SetMediaTime(TUint32 aTimeInMilliSeconds) + { + // Set Current Time in the document + if(iSvgDocument != NULL) + { + //iSvgDocument->SetCurrentTime( aTimeInMilliSeconds ); + + iSvgDocument->iAnimationResetNeeded = ETrue; + } + if(this->iSvgDocument && this->iSvgDocument->iEventHandler) + { + this->iSvgDocument->iEventHandler->SetCurrentTime(aTimeInMilliSeconds); + } + // Find all animation elements in the document + RPointerArray lAnimationEleList; + if(iSvgDocument) + { + iSvgDocument->FindAllElements((CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgMediaAnimationElement, lAnimationEleList ); + TInt lAnimationEleCnt = lAnimationEleList.Count(); + for ( TInt lCurAnimationEle = 0; + lCurAnimationEle < lAnimationEleCnt; lCurAnimationEle++ ) + { + CSvgMediaAnimationElementImpl* lAnimationElement = + (CSvgMediaAnimationElementImpl* )lAnimationEleList[ lCurAnimationEle ]; + CSvgDocumentImpl* lChildDoc = lAnimationElement->GetChildDocument(); + if ( lChildDoc ) + { + lChildDoc->iAnimationResetNeeded = ETrue; + if ( lChildDoc->iEventHandler ) + { + lChildDoc->iEventHandler->SetCurrentTime(aTimeInMilliSeconds); + } + + } + } + lAnimationEleList.Close(); + + } + this->SetSVGEngineState(ESVGEnginePaused); + this->SeekEngine(aTimeInMilliSeconds); + + } + +// -------------------------------------------------------------------------- +// TBool CSvgEngineImpl::IsElementVisible( TInt aElementId ) +// --------------------------------------------------------------------------- +TBool CSvgEngineImpl::IsElementVisible( TInt aElementId ) + { + if ( aElementId == 0 || iFrameBuffer == NULL ) + { + return EFalse; + } + + CSvgElementImpl* element = (CSvgElementImpl*)aElementId; + + TInt32 visibleAttribute = -1; + + TRAPD(error,element->GetAttributeIntL( KCSS_ATTR_VISIBILITY, visibleAttribute )); + if (error != KErrNone) + { + // error processing + } + + + return visibleAttribute == 0; + } + +// Set whether to call request observer's UpdateScreen method +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::SetIgnoreUpdateScreen( TBool aBool ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::SetIgnoreUpdateScreen( TBool aBool ) +{ + iIgnoreUpdateScreen = aBool; +} + +/*---------------------------MouseListener---------------------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::AddMouseListener( const MSvgMouseListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::AddMouseListener( const MSvgMouseListener* aListener ) + { + TInt index = iSvgMouseListeners.Find( aListener ); + if ( aListener != NULL && index == KErrNotFound ) + { + iSvgMouseListeners.Append( aListener ); + } + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::RemoveMouseListener( const MSvgMouseListener* aListener ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::RemoveMouseListener( const MSvgMouseListener* aListener ) + { + TInt index = iSvgMouseListeners.Find( aListener ); + if ( index != KErrNotFound ) + { + iSvgMouseListeners.Remove( index ); + } + } + +// -------------------------------------------------------------------------- +// TInt CSvgEngineImpl::MouseListenerCount() +// --------------------------------------------------------------------------- +TInt CSvgEngineImpl::MouseListenerCount() + { + return iSvgMouseListeners.Count(); + } + +/*-------------MouseListener Notifications back to client---------------------------*/ +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyMousePressed( RPointerArray& aElements, +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyMousePressed( RPointerArray& aElements, + TInt aX, TInt aY ) + { + TInt svgMouseListenersCnt = iSvgMouseListeners.Count(); + for ( TInt i = 0; i < svgMouseListenersCnt; i++ ) + { + iSvgMouseListeners[i]->MousePressed( aElements, aX, aY ); + } + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyMouseReleased( RPointerArray& aElements, +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyMouseReleased( RPointerArray& aElements, + TInt aX, TInt aY ) + { + TInt svgMouseListenersCnt = iSvgMouseListeners.Count(); + for ( TInt i = 0; i < svgMouseListenersCnt; i++ ) + { + iSvgMouseListeners[i]->MouseReleased( aElements, aX, aY ); + } + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyMouseEntered( RPointerArray& aElements, +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyMouseEntered( RPointerArray& aElements, + TInt aX, TInt aY ) + { + TInt svgMouseListenersCnt = iSvgMouseListeners.Count(); + for ( TInt i = 0; i < svgMouseListenersCnt; i++ ) + { + iSvgMouseListeners[i]->MouseEntered( aElements, aX, aY ); + } + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyMouseExited( RPointerArray& aElements, +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyMouseExited( RPointerArray& aElements, + TInt aX, TInt aY ) + { + TInt svgMouseListenersCnt = iSvgMouseListeners.Count(); + for ( TInt i = 0; i < svgMouseListenersCnt; i++ ) + { + iSvgMouseListeners[i]->MouseExited( aElements, aX, aY ); + } + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::NotifyMouseMoved( RPointerArray& aElements, +// --------------------------------------------------------------------------- +void CSvgEngineImpl::NotifyMouseMoved( RPointerArray& aElements, + TInt aX, TInt aY ) + { + TInt svgMouseListenersCnt = iSvgMouseListeners.Count(); + for ( TInt i = 0; i < svgMouseListenersCnt; i++ ) + { + iSvgMouseListeners[i]->MouseMoved( aElements, aX, aY ); + } + } + +/*---------------------------------------------------------------------*/ + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::GetViewableElementsAtPoint( RPointerArray& aElements, TInt aX, TInt aY ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::GetViewableElementsAtPoint( CSvgDocumentImpl* aSvgDocument, RPointerArray& aElements, TInt aX, TInt aY ) + { + if ( aSvgDocument == NULL ) + return; + + //JSR226 Change this could slow down event handling but it seems to be required to work + UpdateCTM(aSvgDocument); + + // Gather all "viewable" elements + RPointerArray iViewableElementList; + if ( iViewableElementList.Count() == 0 ) + { + FindAllViewableElements( (CSvgElementImpl* )aSvgDocument->RootElement(), + iViewableElementList ); + } + + // find the bounding box containing point + TGfxPoint2D point( aX, aY ); + TGfxRectangle2D boundingBox; + TInt viewableEleListCnt = iViewableElementList.Count(); + for ( TInt i = 0; i < viewableEleListCnt; i++ ) + { + CSvgElementImpl* element = iViewableElementList[i]; + element->GetBBox( boundingBox ); + if ( boundingBox.Contains( point ) ) + { + aElements.Append( element ); + } + } + // Display of list + iViewableElementList.Close(); + } + +// Return all viewable elements +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::FindAllViewableElements( CSvgElementImpl* aStartElement, +// --------------------------------------------------------------------------- +void CSvgEngineImpl::FindAllViewableElements( CSvgElementImpl* aStartElement, + RPointerArray& iElementList ) + { + if ( aStartElement == NULL ) + return; + // The child elements of the defs element should not be viewable. skip the + // tree traversing if the element id is defs element + if(aStartElement->ElemID() == KSvgDefsElement) + return; + + CSvgElementImpl* child = (CSvgElementImpl*)aStartElement->FirstChild(); + while ( child != NULL ) + { + // add to list if child is found + TInt32 displayValue = 0; + TRAP_IGNORE(child->GetAttributeIntL( KCSS_ATTR_DISPLAY, displayValue )); + if ( child->IsViewable() && child->IsVisible() && displayValue != KDisplayEnumNone ) + { + //JSR226 CHANGE do we care if multiple signals are sent to some elements - would be faster without this check + if ( iElementList.Find( child ) == KErrNotFound ) + { + iElementList.Append( child ); + } + } + // find in grandchildren + FindAllViewableElements( child, iElementList ); + child = (CSvgElementImpl*)child->NextSibling(); + } + } + +// Return all non-viewable elements +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::FindAllNonViewableElements( CSvgElementImpl* aStartElement, +// --------------------------------------------------------------------------- +void CSvgEngineImpl::FindAllNonViewableElements( CSvgElementImpl* aStartElement, + RPointerArray& iElementList ) + { + if ( aStartElement == NULL ) + return; + + CSvgElementImpl* child = (CSvgElementImpl*)aStartElement->FirstChild(); + while ( child != NULL ) + { + // add to list if child is found + if ( !child->IsViewable() && !child->IsVisible() ) + iElementList.Append( child ); + + // find in grandchildren + FindAllNonViewableElements( child, iElementList ); + child = (CSvgElementImpl*)child->NextSibling(); + } + } + +/** + * Return the data pointed to by the given URI string, + * from an external source. + */ +// -------------------------------------------------------------------------- +// HBufC8* CSvgEngineImpl::FetchExternalDataL( const TDesC& aUri ) +// --------------------------------------------------------------------------- +HBufC8* CSvgEngineImpl::FetchExternalDataL( const TDesC& aUri ) + { + if ( iRequestObserver == NULL ) + { + #ifdef _DEBUG + RDebug::Printf("CSvgEngineImpl::FetchExternalData--requestobserver is NULL\n"); + #endif //_DEBUG + return NULL; + } + // Connect session + RFs session; + TInt connectError = session.Connect(); + if ( connectError != KErrNone ) + { + #ifdef _DEBUG + RDebug::Printf("CSvgEngineImpl::FetchExternalData--session.Connect() failed: %d\n", connectError ); + #endif //_DEBUG + return NULL; + } + + RFile fileHandle; + // Check for FetchImage error code + TInt fetchError = iRequestObserver->FetchImage( aUri, session, fileHandle ); + if ( fetchError != KErrNone ) + { + #ifdef _DEBUG + RDebug::Printf("CSvgEngineImpl::FetchExternalData--FetchImage error: %d\n", fetchError ); + #endif //_DEBUG + session.Close(); + return NULL; + } + + // Read file size + TInt fileSize = 0; + TInt sizeError = fileHandle.Size( fileSize ); + if ( sizeError != KErrNone ) + { + #ifdef _DEBUG + RDebug::Printf("CSvgEngineImpl::FetchExternalData--fileHandle.Size error: %d\n", sizeError ); + #endif //_DEBUG + session.Close(); + return NULL; + } + + // Allocate memory for file + HBufC8* data = HBufC8::NewL( fileSize ); + TPtr8 des = data->Des(); + TInt readError = fileHandle.Read( des ); + if ( readError != KErrNone ) + { + #ifdef _DEBUG + RDebug::Printf("CSvgEngineImpl::FetchExternalData--fileHandle.Read error: %d\n", readError ); + #endif //_DEBUG + session.Close(); + delete data; + return NULL; + } + + // Successful + session.Close(); + return data; + } +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::SetAudioVolume( TInt aPercentage ); +// -------------------------------------------------------------------------- +void CSvgEngineImpl::SetAudioVolume( TInt aPercentage ) + { + + if ( !iSvgDocument ) + { + return; + } + // Locate all the active audio elements + RPointerArray lAudioElementList; + + iSvgDocument->FindAllElements( + (CSvgElementImpl* )iSvgDocument->RootElement(), + KSvgAudioElement, lAudioElementList ); + // Set the volume on each audio element + TInt lAudEleCnt = lAudioElementList.Count(); + for ( TInt lCurAudioEle = 0; lCurAudioEle < lAudEleCnt; lCurAudioEle++ ) + { + CSvgAudioElementImpl* lAudioElement = (CSvgAudioElementImpl*)lAudioElementList[ lCurAudioEle ]; + lAudioElement->SetVolume( aPercentage ); + } + lAudioElementList.Close(); + } + +// -------------------------------------------------------------------------- +// TBool CSvgEngineImpl::ReadyToRender() +// --------------------------------------------------------------------------- +TBool CSvgEngineImpl::ReadyToRender() + { + return iSvgDocument != NULL; + } + +// -------------------------------------------------------------------------- +// TBool CSvgEngineImpl::IsEndedWithCompleteTextTag( TDes &BufferPtr, +// TInt EndOffset) +// --------------------------------------------------------------------------- +TBool CSvgEngineImpl::IsEndedWithCompleteTextTag(TDes &aBufferPtr,TInt aEndOffset) + { + TChar KOpeningBrace = '<'; + TChar KSlash = '/'; + + // This function searches the buffer in reverse order from the end offset + // to check whether the last element had a complete text tag. + // eg. of complete text tags + // Hello + // + // eg. of an incomplete text tag + // + + TPtrC currentSelectionPtr = aBufferPtr.Left( aEndOffset ); + TInt OpeningBracePos = currentSelectionPtr.LocateReverse( KOpeningBrace ); + TInt SlashPos = currentSelectionPtr.LocateReverse( KSlash ); + TBool retVal = EFalse; + + // In case of a complete text tag the opening brace is one position behind + // slash. + if ( SlashPos == ( OpeningBracePos + 1 ) ) + { + retVal = ETrue; + } + + return retVal; + } + +// -------------------------------------------------------------------------- +// void CSvgEngineImpl::SaveSvgL( const TDesC& aFileName ) +// --------------------------------------------------------------------------- +void CSvgEngineImpl::SaveSvgL( const TDesC& aFileName ) + { + RFs lFs; + RFileWriteStream lStream; + TInt error ; + TChar KOpeningBrace = '<'; + TChar KSlash = '/'; + // Connect to File Server to write the changed content to a file + CleanupClosePushL(lFs); + User::LeaveIfError(lFs.Connect() ); + + TBool isOpened = EFalse; + error = lFs.IsFileOpen( aFileName, isOpened ) ; + // dont leave if file doesnt exist or there is no error + if(error!= KErrNone && error!=KErrNotFound) + { + //usually will come here with KErrNotFound + //since file wont exist + User::Leave(error); + } + + if ( isOpened ) + { + #ifdef _DEBUG + RDebug::Printf( "Cannot SaveSvgL: File is still opened: "); + RDebug::RawPrint( aFileName ); + #endif + CleanupStack::PopAndDestroy(1); + return; + } + + // Try to create the write stream using the file name + if ( lStream.Create( lFs, aFileName, EFileWrite ) != KErrNone ) + { + // If creation fails, file exists already, try to open the + // existing file + User::LeaveIfError( lStream.Open(lFs, aFileName, EFileWrite) ); + } + CleanupClosePushL(lStream); + + // Array to store list of all editable elements + RPointerArray lTextElementList; + + FindEditableElements( (CSvgElementImpl* )iSvgDocument->RootElement(), + lTextElementList ); + CleanupClosePushL(lTextElementList); + TInt index=0, startoffset = 0, endoffset = 0; + + // The content of the file is stored in the root node + HBufC* lBufferContent = ((CSvgSvgElementImpl* )iSvgDocument->RootElement())->iContent; + + + + // While there are remaining editable elements do + while(index < lTextElementList.Count()) + { + TBool EndedWithCompleteTextTag= true; + TInt OrgLength; + + if ( lTextElementList[index]->ElemID() == KSvgTextElement ) + { + // If the element is a element invoke element specific function + // to retrieve the offset and original length + endoffset = ((CSvgTextElementImpl *)lTextElementList[index])->iOffset; + OrgLength = ((CSvgTextElementImpl *)lTextElementList[index])->GetOrgLength(); + } + else + { + // If the element is a