diff -r 000000000000 -r 88edb906c587 svgtopt/SVG/SVGImpl/inc/SVGDocumentImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVG/SVGImpl/inc/SVGDocumentImpl.h Wed Nov 03 18:56:10 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 +#endif + +#include +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& 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& 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* 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* 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& 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& 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& 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& 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& 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 or child + * of 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 or child + * of 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& 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 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* iLoadingListeners; + + // MSvgMouseListener list + RPointerArray 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