--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/SVG/SVGImpl/inc/SVGDocumentImpl.h Thu Jan 07 16:19:02 2010 +0200
@@ -0,0 +1,1113 @@
+/*
+* 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 SVGDOCUMENTIMPL_H
+#define SVGDOCUMENTIMPL_H
+
+
+#if !defined(__E32BASE_H__)
+#include <e32base.h>
+#endif
+
+#include <gdi.h>
+class CSvgEngineImpl;
+class CSvgEventHandler;
+class CSvgErrorImpl;
+class CSvgElementImpl;
+class MSvgEventReceiver;
+#include "SVGXmlDocument.h"
+#include "SVGEvent.h"
+
+#include "SVGEngineInterfaceImpl.h"
+#include "SVGImageLoadingObserver.h" // MSVGImageLoadingObserver
+#include "SVGErrorImpl.h"
+#include "Gfx2dGcOpenVG.h"
+
+//#include "SVGImageHashMap.h"
+#include "SVGFontHashMap.h"
+#include "SVGMemoryManager.h"
+#include "SVGTimedEntityInterface.h"
+
+#include "SvgBitmapFontProvider.h"
+class MXmlElement;
+class CSvgSchemaData;
+class CSvgContentHandler;
+
+class CSvgAnimationBase;
+class CSvgTimeContainer;
+
+/**
+ * Enumeration to define search query constraints for FindAllElements
+ */
+enum TSvgSearchFlags
+ {
+ ESvgSearchAllElements = 0,
+ ESvgSearchExcludeUseSubtree = 0x2,
+ };
+/**
+ * An SVG document that represents a SVG element tree..
+ */
+class CSvgDocumentImpl : public CBase,
+ public MXmlDocument,
+ public MSVGImageLoadingObserver,
+ public MSvgTimedEntityInterface
+ {
+ public:
+ /**
+ * Two Phase constructor for SVG document
+ * @since 1.0
+ * @param aHasParent - Indicates whether document has a
+ * parent document or not
+ * aSyncBehavDefault - Indicates default synchronised behaviour
+ * for runtime synchronisation.
+ * aSyncTolDefault - Indicates the synchronised tolerance in
+ * msecs for runtime synchronisation.
+ * @return CSvgDocumentImpl*
+ */
+ void Reset(MSvgEvent* aEvent);
+
+ static CSvgDocumentImpl* NewL(CSvgBitmapFontProvider* aSvgBitmapFontProvider,
+ const TBool aHasParent = EFalse,
+ const TSvgSyncBehaviour aSyncBehavDefault = KSvgDefaultSyncBehaviour,
+ const TInt32 aSyncTolDefault = KSvgDefaultSyncTolerance );
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param aHasParent - Indicates whether document has a
+ * parent document or not
+ * aSyncBehavDefault - Indicates default synchronised behaviour
+ * for runtime synchronisation.
+ * aSyncTolDefault - Indicates the synchronised tolerance in
+ * msecs for runtime synchronisation.
+ * @return
+ */
+ static CSvgDocumentImpl* NewLC(CSvgBitmapFontProvider* aSvgBitmapFontProvider,
+ const TBool aHasParent = EFalse,
+ const TSvgSyncBehaviour aSyncBehavDefault = KSvgDefaultSyncBehaviour,
+ const TInt32 aSyncTolDefault = KSvgDefaultSyncTolerance );
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ virtual ~CSvgDocumentImpl();
+
+ public:
+ /**
+ * ImageLoadingObserver interface method.
+ * Called from Image loading class to notify image loading
+ * completion.
+ *
+ * @since 1.0
+ * @param : aErrorStatus -- error status, if any
+ * @return : none
+ */
+ virtual void ImageLoadingCompleted( TInt aErrorStatus );
+
+ // Pointer/Hyperlink related
+ void FindAllElements( CSvgElementImpl* aStartElement, TInt aElementId,
+ RPointerArray<CSvgElementImpl>& aList,
+ TSvgSearchFlags aFlags = ESvgSearchAllElements );
+
+ TBool SvgElementPresent(CSvgElementImpl* aElement);
+ TBool SearchByPointer(CSvgElementImpl* aParent, CSvgElementImpl* aElement);
+ CXmlElementImpl* GetFocusElement();
+ void SetFocusElement(CXmlElementImpl* aElement );
+ // From MXmlDocument
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ MXmlElement* CreateElementL( const TDesC& aTagName );
+
+ MXmlElement* CreateElementL( const TUint8 aTagName );
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ TInt CreateAttribute( const TDesC& aName );
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ MXmlElement* GetElementById( const TDesC& aElementId );
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ TInt GetNumberOfIds(MXmlElement* aElement);
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ TDesC* GetId( TInt index );
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ void FindAllIds( CSvgElementImpl* aStartElement, RPointerArray<TDesC>& aList );
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ MXmlElement* AppendChildL( MXmlElement* aAppendChild );
+
+ // From MSvgDocument
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+
+ /**
+ * Get URL
+ */
+ TDesC& GetUrl(); // method of CSvgDocumentImpl
+
+ /**
+ * get root element
+ */
+ IMPORT_C MXmlElement* RootElement(); // method of CSvgDocumentImpl
+
+ // Class functions
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ CSvgSchemaData* SchemaData();
+
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ void SetUri( const TDesC& aUri );
+
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ void GetUri( TDes& aUri );
+
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ void SetEngine( CSvgEngineImpl* aEngine );
+
+ /**
+ * Need method description
+ *
+ * @since 1.0
+ * @param
+ * @return
+ */
+ CSvgEngineImpl* Engine();
+
+ /**
+ * Add an object to the list of objects that are notified of an event
+ *
+ * @since 1.0
+ * @param aElement - An SVG element that wants to be registered for an event (implements MSvgEventReceiver interface)
+ * @param aEventMask - A bit mask that indicates the types of events an object listens for
+ * @return None
+ */
+ void AddToEventReceiverListL( MSvgEventReceiver* aElement,
+ TUint8 aEventMask );
+
+ /**
+ * Add an object to the list of objects that are notified of an event
+ * Has an additional parameter aEvent which is used to check for interactive events
+ *
+ * @since v3.2
+ * @param aElement - An SVG element that wants to be registered for an event (implements MSvgEventReceiver interface)
+ * @param aEvent - An SVG Event that the target element needs to generate
+ * @param aEventMask - A bit mask that indicates the types of events an object listens for
+ * @return None
+ */
+ void AddToEventReceiverListL( MSvgEventReceiver* aElement,
+ TSvgEvent aEvent,
+ TUint8 aEventMask );
+
+ /**
+ * Removed an object to the list of objects that are notified of an event
+ *
+ * @since 1.0
+ * @param aElement - An SVG element that wants to be registered for an event (implements MSvgEventReceiver interface)
+ * @return None
+ */
+ void RemoveFromEventReceiverList( MSvgEventReceiver* aElement );
+
+ /**
+ * Provide the event end time information to the Event Handler
+ *
+ * @since 1.0
+ * @param aElement - An element that, ultimately, processes the event (eg. an animation element)
+ * @param aTime - The end time for an event on the target element
+ * @param aTargetElement - The element for which the event is processed
+ * @return
+ */
+ void AddEventBeginTime(MSvgEventReceiver* aElement, TUint32 aTime, MSvgEventReceiver* aTargetElement );
+
+
+
+ /**
+ * An internal method that sorts the events in a time scale
+ *
+ * @since 1.0
+ * @param None
+ * @return None
+ */
+ void SortEventList();
+
+ /**
+ * returns the next (or prev) focussable object starting with a given index
+ *
+ * @since 1.0
+ * @param aIndex - search for a focussable object with this index
+ * @param aNext - Etrue (next) EFalse (prev) (go forward or backward for search)
+ * @param aEventMask - Event mask for event types the client is interested in
+ * @param aNewIndex - Return the actual index where the object was found
+ * @return The focussable object or NULL if not found
+ */
+ CSvgElementImpl* GetEventReceiverElement(TInt32 aIndex, TBool aNext, TUint8 aEventMask, TInt32& aNewIndex);
+
+ /**
+ * Checks whether the current loaded file is animatable or static
+ *
+ *
+ *
+ * @param : None
+ * @return: TBool boolean
+ */
+
+ TBool IsAnimationFile();
+
+ /**
+ * Checks whether the aSubEventMask is has a valid value set
+ * @since v3.2
+ * @param : aSubEventMask - The bitmap mask which contains the list
+ * of interactive events if any with the element.
+ * @return: Etrue - if aSubEventMask has some valid bits set else EFalsee
+ */
+ TBool IsValidSubEventMask(TUint16 aSubEventMask);
+
+ /**
+ * Sets DRM Check Enable/Disable
+ *
+ *
+ * @param : TBool : aEnable Boolean
+ * @return: None
+ */
+ void SetDRMMode(TBool aEnable);
+
+ void ReInitialize();
+
+ /**
+ * Load a svg content from the given filename
+ *
+ * @param : aFileName : filename of content (binary or text content)
+ * @param : aError : error object to store error-info
+ * @return: None
+ */
+ void Load( const TDesC& aFileName, CSvgErrorImpl& aError );
+
+ /**
+ * Load a svg content from the given byte-array
+ *
+ * @param : aByteData : byte-array content (binary or text content)
+ * @param : aError : error object to store error-info
+ * @return: None
+ */
+ void Load( const TDesC8& aByteData, CSvgErrorImpl& aError, TBool aRemoveFalseSwitchElements = ETrue );
+
+ /**
+ * Load a svg content from JSR226 that is already TDesc16
+ *
+ * @param : aSvgString
+ * @param : aError : error object to store error-info
+ * @return: None
+ */
+ void Load16BitString( const TDesC16& aSvgString, CSvgErrorImpl& aError, TBool aRemoveFalseSwitchElements = ETrue );
+
+ /**
+ * Load a svg content from the given file-handle
+ *
+ * @param : aFileHandle : file-handle content (binary or text content)
+ * @param : aError : error object to store error-info
+ * @return: None
+ */
+ void Load( RFile& aFileHandle, CSvgErrorImpl& aError );
+
+ /**
+ * Set the document to be in thumbnailmode, which will not consume the DRM right
+ * if the Svg content is DRM encrypted.
+ *
+ * @param : aThumbNailMode : thumbnail mode flag.
+ * @return:
+ */
+ void SetThumbNailMode( TBool aThumbNailMode );
+
+
+ /**
+ * Set the document to disable/enable consuming drm rights
+ * @param aEnable: ETrue for disabling consumption of drm rights
+ * @return : none
+ */
+ void SetDRMRights(TBool aEnable);
+ /**
+ * Return whether the loaded document is a thumbnail only. ETrue is returned only
+ * when the loaded content is DRM protected AND SetThumbNailMode is called with ETrue.
+ *
+ * @return:
+ */
+ TBool IsThumbNailOnly();
+
+ /**
+ * Set the flag to indicate this document was prepared (PrepareDom) or loaded (Load).
+ *
+ * @return: None
+ */
+ void SetWasPrepared( TBool aBool );
+
+ /**
+ * Return whether this document was prepared (PrepareDom) or loaded (Load).
+ *
+ * @return: Prepared or Loaded.
+ */
+ TBool WasPrepared();
+
+ /**
+ * Set the list of MSvgLoadingListener for this document to send
+ * back notification of parsing progress. NULL is also valid.
+ * @param : aList : Pointer to list
+ * @return : none
+ */
+ void SetLoadingListeners( const RPointerArray<MSvgLoadingListener>* aList );
+
+ /**
+ * Set the list of MSvgLoadingListener for this document to send
+ * back notification of parsing progress. NULL is also valid.
+ * @param : aList : Pointer to list
+ * @return : none
+ */
+ const RPointerArray<MSvgLoadingListener>* GetLoadingListeners();
+
+ /**
+ * Add a MSvgMouseListener to this SvgEngine
+ *
+ * @param : aListener -- listener to add to listener list
+ * @return: None
+ */
+ void AddInternalMouseListener( const MSvgMouseListener* aListener );
+
+ /**
+ * Remove a MSvgMouseListener to this SvgEngine
+ *
+ * @param : aListener -- listener to remove from listener list
+ * @return: None
+ */
+ void RemoveInternalMouseListener( const MSvgMouseListener* aListener );
+
+ /**
+ * Return number of mouselisteners.
+ *
+ * @return: mouse-listener count
+ */
+ TInt MouseInternalListenerCount();
+
+ /**
+ * 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 NotifyInternalMousePressed( RPointerArray<CSvgElementImpl>& 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 NotifyInternalMouseReleased( RPointerArray<CSvgElementImpl>& 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 NotifyInternalMouseEntered( RPointerArray<CSvgElementImpl>& 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 NotifyInternalMouseExited( RPointerArray<CSvgElementImpl>& 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 NotifyInternalMouseMoved( RPointerArray<CSvgElementImpl>& aElements,
+ TInt aX, TInt aY );
+
+ // LoadingListeners notification
+ /**
+ * Send to loading listeners of a document start event.
+ *
+ * @return: None
+ */
+ void NotifyDocumentStart();
+
+ /**
+ * Send to loading listeners of a document end event.
+ *
+ * @return: None
+ */
+ void NotifyDocumentEnd();
+
+ /**
+ * Send to loading listeners of an element start event.
+ *
+ * @param : aTagName -- name of element tag.
+ * @param : aIsSvgChild -- flag to indicate element is <svg> or child
+ * of <svg> tag.
+ * @return: None
+ */
+ void NotifyElementStart( const TDesC& aTagName,
+ MSvgAttributeList& aAttributeList,
+ TBool aIsSvgChild );
+
+ /**
+ * Send to loading listeners of an element end event.
+ *
+ * @param : aTagName -- name of element tag.
+ * @param : aIsSvgChild -- flag to indicate element is <svg> or child
+ * of <svg> tag.
+ * @return: None
+ */
+ void NotifyElementEnd( const TDesC& aTagName, TBool aIsSvgChild );
+
+ /**
+ * Send to loading listeners of an unsupported element event.
+ *
+ * @param : aTagName -- name of element tag.
+ * @return: None
+ */
+ void NotifyUnsupportedElement( const TDesC& aTagName,
+ MSvgAttributeList& aAttributeList );
+
+ /**
+ * Send to loading listeners of an external data request.
+ *
+ * @param : aUri -- URI of data request.
+ * @return: None
+ */
+ void NotifyExternalDataRequested( const TDesC& aUri );
+
+ /**
+ * Send to loading listeners of a succesfful external data reception.
+ *
+ * @param : aUri -- URI of data request.
+ * @return: None
+ */
+ void NotifyExternalDataReceived( const TDesC& aUri );
+
+ /**
+ * Send to loading listeners of a failed external data request.
+ *
+ * @param : aUri -- URI of data request.
+ * @return: None
+ */
+ void NotifyExternalDataRequestFailed( const TDesC& aUri );
+
+
+ /**
+ * return the animation duration in milliseconds.
+ * @return : duration of animation
+ */
+ TUint32 AnimationDuration();
+
+ /**
+ * return wether animation is indefinite.
+ */
+ TUint32 IsIndefiniteAnimation();
+
+ /**
+ * Called by AppendChild/RemoveChild to notify owner document
+ * of changes.
+ */
+ void ElementAppendedOrRemoved();
+
+ /**
+ * Cancel loading of document if it is currently parsing.
+ */
+ void CancelParsing();
+
+ /**
+ * Return whether document is currently parsing.
+ */
+ TBool IsParsing();
+
+ /**
+ * return whether this document has an error set.
+ */
+ TBool HasError();
+
+ /**
+ * return the error reference. May be NULL. Call HasError first.
+ */
+ MSvgError* GetError();
+
+ /**
+ * Set the error type and error message for this document.
+ * Will note override existing error.
+ */
+ void SetError( TInt aErrorType, const TDesC& aMsg1, const TDesC& aMsg2 );
+
+ void SetIsWarning( TBool aIsWarning = ETrue );
+ //-------------------------------------------------------------------
+ // Utility Functions
+ //-------------------------------------------------------------------
+ /**
+ * Fill the given error object with the appropriate error codes, messages.
+ *
+ * @param : aError : Error object to fill code/message.
+ * @param : aSvgErrorCode : Svg related error code.
+ * @param : aSystemError : Symbian error code.
+ * @param : aMsg1 : Message string
+ * @param : aMsg2 : Second message string, if needed, appended to first string.
+ * @return: None
+ */
+ static void PrepareError( CSvgErrorImpl& aError,
+ TSvgErrorCode aSvgErrorCode, TInt aSystemError,
+ const TDesC& aMsg1, const TDesC& aMsg2 );
+
+ static void OpenSession( RFs& aSession, CSvgErrorImpl& aError );
+
+ // ------------------------------------------------------------------
+ // Opacity
+ // ------------------------------------------------------------------
+ TBool isGroupOpacity( CSvgElementImpl* aElement );
+
+ void PrintAllElements( CSvgElementImpl* aStartElement);
+
+ void QueueFontReleaseReq(CFont* aFont);
+
+
+ /**
+ * Accessor funciton for SyncBehaviorDefault value
+ * @since S60 3.2
+ * @param none
+ * @return TSvgSyncBehavior indicating default value.
+ */
+ TSvgSyncBehaviour SyncBehaviorDefault();
+
+ /**
+ * Accessor funciton for SyncToleranceDefault value
+ * @since S60 3.2
+ * @param none
+ * @return TUint32 indicating default value in msecs.
+ */
+ TUint32 SyncToleranceDefault();
+
+ /**
+ * Set Function for the document's current time
+ * @since S60 3.2
+ * @param aCurTime Current Time to be set in msecs
+ * @return none.
+ */
+ void SetCurrentTime( const TInt32 aCurTime );
+
+ /**
+ * Accessor Function for the document's current time
+ * @since S60 3.2
+ * @param none.
+ * @return TInt32 Current Time to be set in msecs.
+ */
+ TInt32 CurrentTime();
+
+ void DocumentTransform(TGfxAffineTransform& aTr);
+ TGfxAffineTransform GetDocumentTransform();
+
+ /**
+ * Set the Synchronised behaviour for the time container
+ * @since S60 3.2
+ * @param aValue canSlip | locked | independent
+ * @return none.
+ */
+ void SetTCSyncBehavior( const TSvgSyncBehaviour aValue );
+
+ /**
+ * Set the Synchronised Tolerance for the time container
+ * @since S60 3.2
+ * @param aValue Clock-value
+ * @return none.
+ */
+ void SetTCSyncTolerance( const TUint32 aValue );
+
+ /**
+ * Set the time container as Synchronised Master
+ * @since S60 3.2
+ * @param aValue true | false
+ * @return none.
+ */
+ void SetTCSyncMaster( const TBool aValue );
+
+ /**
+ * Accessor for the time container.
+ * @since Series 3.2
+ * @param none.
+ * @return CSvgTimeContainer*
+ */
+ CSvgTimeContainer* TimeContainer();
+
+
+ //Get function(s)
+ CSvgBitmapFontProvider* GetBitmapFontProvider() ;
+
+ void SetImageElementsCount(TInt aCnt);
+
+ TInt GetImageElementsCount();
+
+ /* Return the value of the current focus index.
+ @return: current focus index
+ */
+ TInt32 GetCurFocusIndex();
+
+ /* Set the value fo the current focus index
+ @param: aVal : Value that has to be set as the focus index.
+ @return: none.
+ */
+ void SetCurFocusIndex(TInt32 aVal);
+
+ /* Decrement the value of the current focus index
+ @return: decremented focus index value.
+ */
+ TInt32 DecCurFocusIndex();
+
+ /* Increment the value of the current focus index
+ @return: Incremented focus index value.
+ */
+ TInt32 IncCurFocusIndex();
+
+ /* Return the pointer to the current focus element
+ @return: current focus element
+ */
+ CSvgElementImpl* GetCurFocusObject();
+
+ /* Set the value of the current focus element to aElement.
+ @param: aElement : Element that has to be set as the focus element
+ @return: none.
+ */
+ void SetCurFocusObject(CSvgElementImpl* aElement);
+
+ /*
+ From MSvgTimedEntityInterface
+ Would return the type of object
+ @param none
+ @return type of object
+ */
+ TSvgObjectType ObjectType();
+
+
+
+ /**
+ * Prepare a list of media elements in DOM tree in
+ * postorder
+ * @since Series 3.2
+ * @param aRoot Root Node of tree
+ * @param aPostOrderList List of nodes which
+ * will contain the elements.
+ * @return None.
+ */
+ void ParsePostOrderMediaElements( CSvgElementImpl* aRoot,
+ RPointerArray<CSvgElementImpl>& aPostOrderList);
+
+ /**
+ * Finds if Animation element is there.
+ *
+ * @since Series 3.2
+ * @param none
+ * @return True if animation element is present.
+ */
+ TBool SvgHasAnimationElement();
+
+ /**
+ * Finds if Document content is Interactive
+ *
+ * @since Series 3.2
+ * @param none
+ * @return True if Document content is Interactive
+ */
+ TBool IsDocumentContentInteractive();
+
+ private:
+ /**
+ * Constructor
+ * @param aHasParent - Indicates whether document has a parent or not
+ * aSyncBehavDefault - Indicates default synchronised behaviour
+ * for runtime synchronisation.
+ * aSyncTolDefault - Indicates the synchronised tolerance in
+ * msecs for runtime synchronisation.
+ */
+ CSvgDocumentImpl( CSvgBitmapFontProvider* aSvgBitmapFontProvider, const TBool aHasParent,
+ const TSvgSyncBehaviour aSyncBehavDefault,
+ const TInt32 aSyncTolDefault );
+
+ /**
+ * 2-phase construction
+ */
+ void ConstructL();
+
+ /**
+ * search element by ID
+ */
+ MXmlElement* SearchElementById( MXmlElement* aElement,
+ const TDesC& aId );
+
+ public:
+ TBool iInitSortList;
+ TBool iReqExReqFtrSysLTested;
+ TBool iInitialDrawFlag;
+ CSvgEventHandler *iEventHandler;
+ TBool iIsInteractive;
+ TBool iFinishedParsing;
+ TBool iHasGroupOpacity;
+ //for debugging and performance checking
+ CSvgElementImpl* iPerfText;
+
+ TUint32 iTimeForJSR226;
+
+// CSvgImageHashMap* iImageHashMap;
+ CSvgFontHashMap* iFontHashMap;
+ CSvgMemoryManager* iMemoryManager;
+
+ RPointerArray<CSvgAnimationBase> iSvgAnimations;
+
+ TInt iImageElementCnt;
+
+ private: // From MSvgTimedEntityInterface
+ /**
+ * From MSvgTimedEntityInterface
+ * The parent time container provides the timing clock to
+ * the timed entity (audio, video, animation, document)
+ * using this routine.
+ * @since Series 3.2
+ * @param aTick Current tick information
+ * @return none.
+ */
+ void ParentTimeContainerTick( TSvgTick aTick );
+
+ /**
+ * From MSvgTimedEntityInterface
+ * Returns the sync behavior of the entity.
+ * @since Series 3.2
+ * @param none.
+ * @return TSvgSyncBehaviour Element's Sync Behaviour.
+ */
+ TSvgSyncBehaviour GetEntitySyncBehavior();
+
+ /**
+ * From MSvgTimedEntityInterface
+ * When the timed entity acts as timing master in the time container,
+ * the time container gets the timed entity clock using this method
+ * and feeds to rest of timed entities.
+ * @since Series 3.2
+ * @param aEntityCurTime Current Entity Time in msecs.
+ * @return none.
+ */
+ void GetEntityCurrentTime( TUint32& aEntityCurTime );
+
+ /**
+ * From MSvgTimedEntityInterface
+ * Returns the configured sync master value(as per DOM tree) as specified
+ * in the SVG content.
+ * @since Series 3.2
+ * @param aIsSyncMaster Indicates whether the element is configured as
+ * Sync Master.
+ * @return none.
+ */
+ void GetCnfSyncMasterStatus( TBool& aIsSyncMaster );
+
+ /**
+ * From MSvgTimedEntityInterface
+ * Check if timed entity is going to act as timing master in the
+ * time container. This behavior could change dynamically.
+ * @since Series 3.2
+ * @param aIsSyncMaster Indicates whether the element is currrently Sync Master.
+ * @return none.
+ */
+ void GetCurSyncMasterStatus( TBool& isSyncMaster );
+
+ /**
+ * From MSvgTimedEntityInterface
+ * If some other element is resolved as syncMaster in the time container group,
+ * this element can not act as sync master.
+ * @since Series 3.2
+ * @param aSyncMasterStatus Indicates whether the element is currrently
+ * Sync Master.
+ * @return none.
+ */
+ void SetCurSyncMasterStatus( TBool aSyncMasterStatus );
+
+ /**
+ * From MSvgTimedEntityInterface
+ * Check if timed entity can provide timing ticks to rest of time
+ * container elements. This behavior could change dynamically.
+ * For example, if audio clip is over, the audio element can't generate
+ * ticks for others.
+ * @since Series 3.2
+ * @param none.
+ * @return TBool True if can generate timing tick.
+ */
+ TBool CanGenerateTick();
+
+ /**
+ * Check if timed entity can use its parent's tick. Usually only the
+ * parent document should return true for this function.
+ * All other elements return false
+ * @since Series 3.2
+ * @param none.
+ * @return TBool True if can use parent's timing tick.
+ */
+ TBool CanUseParentTick();
+
+ /**
+ * From MSvgTimedEntityInterface
+ * If the timed entity needs to be in sync with the time container and
+ * it has slipped beyond the sync tolerance limit, the method is called to
+ * bring the element in sync with the time container.
+ * @since Series 3.2
+ * @param aSynctime Time for resync in msecs.
+ * @return none.
+ */
+ void ResyncTimedEntity( TUint32 aSynctime );
+
+ /**
+ * From MSvgTimedEntityInterface
+ * This would be used for pausing the timed entity while other locked
+ * timed entities get loaded.
+ * @since S60 3.2
+ * @param none.
+ * @return none.
+ */
+ void PauseTimedEntity();
+
+ /**
+ * From MSvgTimedEntityInterface
+ * This would be used for resuming the timed entity once all locked
+ * timed entities get loaded.
+ * @since S60 3.2
+ * @param none.
+ * @return none.
+ */
+ void ResumeTimedEntity();
+
+ /**
+ * From MSvgTimedEntityInterface
+ * This would be used for stopping the timed entity.
+ * @since S60 3.2
+ * @param none.
+ * @return none.
+ */
+ void StopTimedEntity();
+
+
+ CSvgTimeContainer* GetChildTimeContainer();
+
+
+ private:
+ void Load( RFs& aSession, RFile& aFileHandle, CSvgErrorImpl& aError );
+
+ void ProcessDRMError( TInt errorCode, CSvgErrorImpl& aError );
+
+ TBool IsGzipContent( RFile& aFile );
+ TBool IsGzipContent( const TDesC8& aByteArray );
+
+ TBool IsDRMContent( RFile& aFileHandle );
+ TBool IsDRMContent( const TDesC8& aByteData );
+
+ TBool IsBinarySvg( const TDesC8& aByteArray );
+
+ TBool ProcessGZipContent( RFs& aSession,
+ RFile& aFileHandle,
+ TFileName& aFileName,
+ CSvgErrorImpl& aError );
+
+ TBool ProcessGZipContent( RFs& aSession,
+ TFileName& aZippedFileName,
+ TFileName& aUnzippedFileName ,
+ CSvgErrorImpl& aError );
+
+ HBufC8* ProcessDRMContentL( RFile& aFileHandle, CSvgErrorImpl& aError );
+
+ void ProcessSvgContentL( const TDesC8& aByteArray, CSvgErrorImpl& aError, TBool aRemoveFalseSwitchElements = ETrue );
+
+ void Process16BitSvgContentL( const TDesC16& aByteArray, CSvgErrorImpl& aError, TBool aRemoveFalseSwitchElements = ETrue );
+
+ TInt GetProcessPrivatePath( RFs& aSession, TFileName& aPath );
+
+ TInt CreateProcessPrivateDirectory( RFs& aSession, TFileName& aPath );
+
+ TInt WriteToTempFile( RFs& aSession, const TDesC8& aByteArray,
+ TFileName& aFilename, CSvgErrorImpl& aError );
+
+ TInt WriteToTempFile( RFs& aSession, RFile& aFileHandle,
+ TFileName& aFilename, CSvgErrorImpl& aError );
+
+ void LoadingCompleted();
+
+ TUint32 SubtreeDuration( CSvgElementImpl* aRootElement );
+
+ public:
+ TBool iAnimationResetNeeded;
+
+ // Flag set to ETrue when content-handler is removing false switch statements
+ TBool iIsPruningTree;
+ TBool iIsRendering;
+
+ private:
+ CSvgEngineImpl* iEngine;
+
+ TBuf<256> iUri;
+ CSvgElementImpl* iRootElement;
+
+ CSvgSchemaData* iSchemaData;
+
+ TBool iDrmEnable;
+
+ //flag used for DOM_Reuse
+ TBool iMultipleRendering;
+
+ TBool iHasGradientElement;
+
+ TBool iIsThumbNailMode;
+ TBool iIsDRMProtected;
+ //The value that holds the index of the current focus element.
+ TInt32 iCurObjIdx;
+ // pointer to the current focus element object.
+ CSvgElementImpl* iCurrentFocusObject;
+ // DRM Rights consumption
+ TBool iDrmRightsConsumptionEnabled;
+
+ // Flag to indicate this dom was Loaded or Prepared.
+ TBool iWasPrepared;
+
+ const RPointerArray<MSvgLoadingListener>* iLoadingListeners;
+
+ // MSvgMouseListener list
+ RPointerArray<MSvgMouseListener> iSvgMouseListeners;
+
+ TBool iCheckedAnimationDuration;
+ TUint iAnimationDuration;
+
+ CSvgContentHandler* iXmlHandler;
+
+ CSvgErrorImpl* iError;
+
+ // Time container for document for run time sync
+ CSvgTimeContainer* iTimeContainer;
+ // Indicates if this document a top-level document
+ TBool iHasParent;
+
+ // Default run time sync behaviour
+ TSvgSyncBehaviour iSyncBehaviorDefault;
+
+ // Default synchronised tolerance value in msecs
+ TUint32 iSyncToleranceDefault;
+
+
+ static const TInt KIndefiniteAnimationDuration = 2147483647;
+ TGfxAffineTransform iTransformMatrix;
+
+ //Stores Font Type information as passed by CSvgEngineInterfaceImpl
+ CSvgBitmapFontProvider *iSvgBitmapFontProvider;
+ };
+
+#endif // SVGDOCUMENTIMPL_H