--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/SVG/SVGImpl/inc/SVGMediaAnimationElementImpl.h Thu Jan 07 16:19:02 2010 +0200
@@ -0,0 +1,688 @@
+/*
+* Copyright (c) 2005-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: This class provides the functionality for the animation
+ element as specified in the SVG 1.2 specification
+ *
+*/
+
+#if !defined(__E32BASE_H__)
+#include <e32base.h>
+#endif
+
+#ifndef C_SVGMediaAnimationElementImpl_H
+#define C_SVGMediaAnimationElementImpl_H
+
+#include "SVGMediaElementBase.h"
+#include "SVGTimeContainer.h"
+#include "SVGListener.h"
+
+class CSvgDocumentImpl;
+class MXmlDocument;
+class CSvgFitToViewBoxImpl;
+class CSvgErrorImpl;
+
+NONSHARABLE_CLASS( CSvgMediaAnimationElementImpl ):
+ public CSvgMediaElementBase,
+ public MSvgMouseListener,
+ public MSvgTimeContainerObserver
+ {
+
+ public:
+ /**
+ * Two Phase Constructor
+ *
+ * since S60 3.2
+ * @param animation element id and document pointer
+ * @return Animation element object
+ */
+ static CSvgMediaAnimationElementImpl* NewL( const TUint8 aElemID,
+ CSvgDocumentImpl* aDoc );
+ /**
+ * Two Phase Constructor
+ *
+ * since S60 3.2
+ * @param animation element id and document pointer
+ * @return Animation element object
+ */
+
+ static CSvgMediaAnimationElementImpl* NewLC( const TUint8 aElemID,
+ CSvgDocumentImpl* aDoc );
+ /**
+ * Set the Synchronised behaviour for the animation element
+ * @since S60 3.2
+ * @param aValue "canSlip" | "locked" | "independent" | "default"
+ * @return none.
+ */
+ virtual void SetSyncBehavior( const TDesC& aValue );
+
+ /**
+ * Set the Synchronised Tolerance for the animation element
+ * @since S60 3.2
+ * @param aValue Clock-value | "default"
+ * @return none.
+ */
+ virtual void SetSyncTolerance( const TDesC& aValue );
+
+ /**
+ * Set the animation element as Synchronised Master
+ * @since S60 3.2
+ * @param aValue "true" | "false"
+ * @return none.
+ */
+ virtual void SetSyncMaster( const TDesC& aValue );
+
+
+ private:
+
+ /**
+ * Two Phase Constructor
+ *
+ * since S60 3.2
+ * @param animation element id and document pointer
+ * @return Animation element object
+ */
+ void ConstructL( const TUint8 aElemID,
+ CSvgDocumentImpl* aDoc );
+
+ /**
+ * Constructor
+ *
+ * since S60 3.2
+ * @param aDoc a document pointer
+ * @return none
+ */
+ CSvgMediaAnimationElementImpl( CSvgDocumentImpl* aDoc );
+ public:
+ /**
+ * A method to (deep) clone the current element
+ *
+ * since S60 3.2
+ * @param None
+ * @return An MXmlElement pointer to the object that is a copy of
+ * the current element
+ */
+ MXmlElement* CloneL(MXmlElement* aParentElement);
+
+ /**
+ * Destructor
+ *
+ * since S60 3.2
+ * @param none
+ * @return none
+ */
+ virtual ~CSvgMediaAnimationElementImpl();
+
+ // From MXmlElement API
+
+
+ /**
+ * Set attribute interface for Animation element
+ *
+ * since S60 3.2
+ * @param aName - A string buffer containing the name of the attribute
+ * @param aValue - A string buffer containing the value of the attribute
+ * @return An integer containing success/failure for this action
+ */
+ TInt SetAttributeL( const TDesC& aName,
+ const TDesC& aValue );
+
+ /**
+ * Set attribute interface for Animation element
+ *
+ * since S60 3.2
+ * @param aName - A string buffer containing the name of the attribute
+ * @return An integer containing success/failure for this action
+ */
+ TInt SetAttributeDesL( const TInt aNameId,
+ const TDesC& aValue );
+
+
+ /**
+ * Returns x-y or width-height attributes for Animation element
+ *
+ * since S60 3.2
+ * @param
+ * @return An integer containing success/failure for this action
+ */
+ TInt GetAttributeFloat( const TInt aNameId,
+ TFloatFixPt& aValue );
+
+ /**
+ * Sets x-y or width-height attributes for Animatione element
+ *
+ * since S60 3.2
+ * @param
+ * @return An integer containing success/failure for this action
+ */
+ TInt SetAttributeFloatL( const TInt aNameId,
+ TFloatFixPt aValue );
+
+
+ /**
+ * ReceiveEventL: This function will be called whenever the registered
+ * event was happened.
+ *
+ * @since Series 60 3.1
+ * @param MSvgEvent* aEvent
+ * @return TBool ETrue if redraw is needed
+ */
+ TBool ReceiveEventL( MSvgEvent* aEvent );
+
+ /**
+ * Resets the animation element,starts from initial position
+ *
+ * since S60 3.2
+ * @param none
+ * @return none
+ */
+ void ResetAnimationL();
+
+ /**
+ * Need method description
+ *
+ * since S60 3.2
+ * @param MSvgEvent
+ * @return none
+ */
+ void Reset( MSvgEvent* aEvent );
+
+ /**
+ * Calls AnimProcL of animation element
+ *
+ * since S60 3.2
+ * @param
+ * @return TBool ETrue if child svg document is there
+ */
+ TBool DoAnimProcL(MSvgEvent* aEvent);
+
+
+ /**
+ * Return wether an svg element is displayable, such as <rect>, <circle>, or
+ * an abstract element, such as <g>, <animate>.
+ *
+ * since S60 3.2
+ * @param None
+ * @return ETrue if element is viewable.
+ */
+ TBool IsViewable();
+
+ /**
+ *
+ * since S60 3.2
+ * @param TBool
+ * @return none
+ */
+ void Print( TBool aIsEncodeOn );
+
+ /**
+ * Draws the child svg in the animation element
+ * since S60 3.2
+ * @param GraphicsContext and SVGElement
+ * @return ETrue if draw is successful else EFalse
+ */
+ TBool DrawL( CGfx2dGc* aGc, CSvgElementImpl* aElement );
+
+ /**
+ * Sets the initial CTM on animation element
+ * since S60 3.2
+ * @param none
+ * @return none
+ */
+ void SetInitialCTM();
+
+ /**
+ * Accessor function for obtaining the child SVG document
+ * @since S60 3.2
+ * @param none.
+ * @return CSvgDocumentImpl* Pointer to the document else NULL
+ */
+ CSvgDocumentImpl* GetChildDocument();
+
+ /**
+ *
+ * since S60 3.2
+ * @param align variabel to indicate alignment method, aMeetSlice which
+ is for new viewport.
+ * @return none
+ */
+ void SetPreserveAspectRatioL( TSvgPreserveAspectAlignType aAlign,
+ TSvgMeetOrSliceType aMeetSlice );
+
+ /**
+ * Sets the width of animation element
+ * since S60 3.2
+ * @param aValue a Width attribute value from Svg file
+ * @return
+ */
+ void SetWidth(TReal32 aValue);
+
+ /**
+ * Sets the height of animation element
+ * since S60 3.2
+ * @param aValue a Height attribute value from Svg file
+ * @return none
+ */
+ void SetHeight(TReal32 aValue);
+
+ /**
+ * prepares child svg document
+ * since S60 3.2
+ * @param aFileHandle for child svg
+ * @return MSvgError object
+ */
+ MSvgError* PrepareDomChildSvg( RFile& aFileHandle, TInt& aHandle, TInt aEngine);
+
+ /**
+ * prepares child svg document
+ * @param aFileHandle for child svg
+ * @return MSvgError object
+ */
+ MSvgError* PrepareDomChildSvg (const TDesC& aFileName,TInt& aHandle, TInt aEngine);
+
+ /**
+ * prepares child svg document
+ * since S60 3.2
+ * @param aFileHandle for child svg
+ * @return MSvgError object
+ */
+ MSvgError* PrepareDomChildSvg(const TDesC8& aByteData, TInt& aHandle, TInt aEngine );
+
+ public: // From CSvgMediaElementBase
+ /**
+ * 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
+ * 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
+ * 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();
+
+ /**
+ * 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 CSvgMediaElementBase
+ * 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 CSvgMediaElementBase
+ * 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 CSvgMediaElementBase
+ * This would be used for stoping the timed entity once all locked
+ * timed entities get loaded.
+ * @since S60 3.2
+ * @param none.
+ * @return none.
+ */
+ void StopTimedEntity();
+
+
+ /*
+ From MSvgTimedEntityInterface
+ Would return the type of object
+ @param none
+ @return type of object
+ */
+ TSvgObjectType ObjectType();
+
+ /*
+ From MSvgTimedEntityInterface
+ Return CSvgTimeContainer object
+ @param none
+ @return CSvgTimeContainer
+ */
+ CSvgTimeContainer* GetChildTimeContainer();
+
+ private: // From MSvgTimeContainerObserver
+ /**
+ * From MSvgTimeContainerObserver
+ * Indicates that all locked elements in child container are ready
+ * to render.
+ * @since S60 3.2
+ * @param none.
+ * @return none.
+ */
+ void TimeContainerReady();
+
+ /**
+ * From MSvgTimeContainerObserver
+ * Indicates that at least one locked element in child container
+ * is not ready to render.
+ * @since S60 3.2
+ * @param none.
+ * @return none.
+ */
+ void TimeContainerNotReady();
+
+ private:
+ // From CSvgAnimationBase
+
+ /**
+ *
+ *
+ *
+ * @since S60 3.2
+ * @param MSvgTimerEvent.
+ * @return TBool.
+ */
+ virtual TBool AnimProcL( MSvgTimerEvent* aEvent );
+
+ /**
+ * Creates key times and set animation time according to calcmode
+ * Sets first begin time, adds target element to event listener
+ * @since S60 3.2
+ * @param none.
+ * @return none.
+ */
+ virtual void InitAnimationL();
+
+ /**
+ *
+ * @since S60 3.2
+ * @param MSvgPreserveAspectRatio.
+ * @return none.
+ */
+ void GetPreserveAspectRatio( MSvgPreserveAspectRatio*& aAspectRatio );
+
+ /**
+ * X co-ordinate is returned
+ *
+ * since S60 3.2
+ * @param none
+ * @return X position of Animation element
+ */
+
+ TFloatFixPt X();
+
+
+ /**
+ * Y co-ordinate is returned
+ *
+ * since S60 3.2
+ * @param none
+ * @return Y position of Animation element
+ */
+ TFloatFixPt Y();
+
+
+ /**
+ * Width is returned
+ *
+ * since S60 3.2
+ * @param none
+ * @return Width of Animation element
+ */
+ TFloatFixPt Width();
+
+
+ /**
+ * Height is returned
+ *
+ * since S60 3.2
+ * @param none
+ * @return Height of Animation element
+ */
+ TFloatFixPt Height();
+
+
+ /**
+ *
+ *
+ * since S60 3.2
+ * @param TGfxRectangle2D
+ * @return
+ */
+ void GetBBox( TGfxRectangle2D& aBbox );
+
+ /**
+ *
+ *
+ * since S60 3.2
+ * @param TSvgFourPointRect
+ * @return none
+ */
+ void GetFourPointBBox(TSvgFourPointRect& aFourPointBbox);
+
+
+ /**
+ *
+ *
+ * since S60 3.2
+ * @param none
+ * @return
+ */
+ void GetUnscaledBBox( TGfxRectangle2D& aBbox );
+
+
+ /**
+ * Notified when the mouse pointer enters a visible svg element.
+ *
+ * since S60 3.2
+ * 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<CSvgElementImpl>& aElements,
+ TInt aX, TInt aY );
+
+ /**
+ * Notified when the mouse pointer exits a visible svg element.
+ *
+ * since S60 3.2
+ * 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<CSvgElementImpl>& aElements,
+ TInt aX, TInt aY );
+
+
+ /**
+ * Notified when the mouse pointer has already entered a visible
+ * svg element and just moved but remains inside its bounding-box.
+ *
+ * since S60 3.2
+ * 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<CSvgElementImpl>& aElements,
+ TInt aX, TInt aY );
+
+ /**
+ * Notified when the mouse pointer is pressed down on visible svg element.
+ *
+ * since S60 3.2
+ * 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<CSvgElementImpl>& aElements,
+ TInt aX, TInt aY );
+
+ /**
+ * Notified when the mouse pointer is released on on visible svg element.
+ *
+ * since S60 3.2
+ * 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<CSvgElementImpl>& aElements,
+ TInt aX, TInt aY );
+
+
+ /**
+ * updates the CTM
+ *
+ * since S60 3.2
+ * @param none
+ * @return none
+ */
+ virtual void UpdateCTM();
+
+
+ /**
+ *
+ *
+ * since S60 3.2
+ * @param none
+ * @return none
+ */
+ void DeactivateAnimation();
+
+ protected:
+
+ /**
+ * does a deep copy of mediaanimation element
+ *
+ * since S60 3.2
+ * @param CSvgMediaAnimationElementImpl element
+ * @return none
+ */
+ void CopyL( CSvgMediaAnimationElementImpl* aDestElement );
+ private:
+ // DRM related
+ TBool iDrmEnabled;
+
+ // Thumbnail mode
+ TBool iIsThumbNailMode;
+
+ // MSvgLoadingListener list
+ RPointerArray<MSvgLoadingListener> iSvgLoadingListeners;
+
+ // Keep track of elements currently having mouse pointer inside
+ // to report mouse-exit when it is moved.
+ RPointerArray<CSvgElementImpl> iSvgMouseEnteredElements;
+
+ // Flag to indicate Load or PrepareDom call.
+ TBool iIsLoadingRequest;
+
+ TBool iMouseDownFlag;
+
+ TBool iFileIsLoaded; //checks for parsing error
+
+
+
+ TFloatFixPt iScale;
+ CSvgFitToViewBoxImpl* iViewBoxImpl;
+ TFloatFixPt iX;
+ TFloatFixPt iY;
+ TBool iIsFocusable; // To be implemented
+ // TBool iInitialVisibility; // InitialVisibility of the Animatin element
+ // Referenced (target) element
+ CSvgElementImpl* iReferencedElement;
+
+
+ CSvgErrorImpl* iSvgError; // error object
+ CSvgDocumentImpl* iNewDocument; // Document pointer for child svg
+ TGfxAffineTransform iOriginalRootTr; // For Transform
+ TBool iIsOriginalRootTrSet;
+ TFloatFixPt iWidth;
+ TFloatFixPt iHeight;
+
+ enum TAnimationState // State of animation element
+ {
+ EPlayerStateIdle,
+ EPlayerStatePlaying,
+ EPlayerStatePaused,
+ EPlayerStateStop,
+ EPlayerProhibit
+ };
+
+ TAnimationState iAnimationStatus;
+
+ enum TAnimationVisible // Visibility State of animation element
+ {
+ EAnimationNotVisible,
+ EAnimationInitialised,
+ EAnimationVisible
+ };
+
+ TAnimationVisible iInitialVisibility;
+ // Save the tick at the time animation starts
+ TSvgTick iBeginTick;
+ // Indicates whether time container issued a pause command
+ TBool iIsSyncPauseIssued;
+ TBool iDurMediaTime; // if duration is media
+ HBufC* iChildSvgName ;
+
+
+ };
+
+#endif // C_SVGMediaAnimationElementImpl_H