svgtopt/SVG/SVGImpl/src/SVGLockedRealTimeEntity.cpp
changeset 46 88edb906c587
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/SVG/SVGImpl/src/SVGLockedRealTimeEntity.cpp	Wed Nov 03 18:56:10 2010 +0200
@@ -0,0 +1,279 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+#include "SVGLockedRealTimeEntity.h"
+
+CSvgLockedRealTimeEntity* CSvgLockedRealTimeEntity::NewL(CSvgDocumentImpl* aDoc)
+    {
+    CSvgLockedRealTimeEntity* self = new (ELeave) CSvgLockedRealTimeEntity(aDoc);
+    CleanupStack::PushL(self);
+    self->ConstructL(aDoc);
+    CleanupStack::Pop(self);
+    return self;
+    }
+//==========================================================================
+void  CSvgLockedRealTimeEntity::ConstructL(CSvgDocumentImpl* aDoc)
+    {
+        iOwnerDocument = aDoc;
+    }
+//==========================================================================
+CSvgLockedRealTimeEntity::CSvgLockedRealTimeEntity(CSvgDocumentImpl* aDoc): CSvgMediaElementBase( aDoc ),
+                            iIsPaused(EFalse),
+                            iSyncMasterCurrent(EFalse)
+    {
+    //SyncBehaviour is locked
+	//MediaState is ready always
+
+    }
+//==========================================================================
+CSvgLockedRealTimeEntity::~CSvgLockedRealTimeEntity()
+    {
+    
+    }
+
+//==========================================================================
+//from svgelementimpl
+void CSvgLockedRealTimeEntity::Print(TInt /*aValue*/)
+    {
+    
+    }
+
+//==========================================================================
+/**
+* The parent time container provides the timing clock to 
+* the timed entity (audio, video, animation, document) 
+* using this routine.
+* @since S60 3.2
+* @param aTick Current tick information 
+* @return none.
+*/
+void CSvgLockedRealTimeEntity::ParentTimeContainerTick( TSvgTick /*aTick*/ )
+{
+    
+}
+
+//==========================================================================
+/**
+* Returns the sync behavior of the entity.
+* @since S60 3.2
+* @param none. 
+* @return TSvgSyncBehaviour Element's Sync Behaviour.
+*/
+TSvgSyncBehaviour CSvgLockedRealTimeEntity::GetEntitySyncBehavior()
+{
+    return ESvgSyncLocked;
+}
+        
+//==========================================================================
+/**
+* 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 S60 3.2
+* @param aEntityCurTime Current Entity Time in msecs. 
+* @return none.
+*/
+void  CSvgLockedRealTimeEntity::GetEntityCurrentTime( TUint32& aEntityCurTime )
+    {
+    //Keep returning the same time if the entity is paused
+    if(iIsPaused)
+        {
+            aEntityCurTime = iStoredTick.iParentTcTick;
+        }
+    //add the relative time difference in realtimetick to parenttick
+    else
+        {
+            TSvgTick curTick = iOwnerDocument->TimeContainer()->GetCurTick();
+            TInt32 delta = curTick.iRealTimeTick - iStoredTick.iRealTimeTick;
+            
+            if(delta < 0)
+                delta = 0;
+            
+            aEntityCurTime = iStoredTick.iParentTcTick + delta;
+            
+        }
+    }
+//==========================================================================
+/**
+* Returns the configured sync master value(as per DOM tree) as specified 
+* in the SVG content.
+* @since S60 3.2
+* @param aIsSyncMaster Indicates whether the element is configured as 
+*                      Sync Master. 
+* Locked Real Time Entity can never be configured as syncmaster hence
+* This implementation is NULL
+* @return none.
+*/
+void CSvgLockedRealTimeEntity::GetCnfSyncMasterStatus( TBool& /*aIsSyncMaster*/ )
+{
+    
+}
+
+//==========================================================================
+/**
+* Check if timed entity is going to act as timing master in the 
+* time container. This behavior could change dynamically.
+* @since S60 3.2
+* @param aIsSyncMaster Indicates whether the element is currrently Sync Master. 
+* @return none.
+*/
+void CSvgLockedRealTimeEntity::GetCurSyncMasterStatus( TBool& isSyncMaster )
+{
+        isSyncMaster = iSyncMasterCurrent;
+}
+
+//==========================================================================
+/** If some other element is resolved as syncMaster in the time container group, 
+* this element can not act as sync master. 
+* @since S60 3.2
+* @param aSyncMasterStatus Indicates whether the element is currrently 
+*                          Sync Master. 
+* @return none.
+*/
+void CSvgLockedRealTimeEntity::SetCurSyncMasterStatus( TBool aSyncMasterStatus )
+{
+    //iSyncMasterCurrent stores current Mastership status of LRT
+    // only if LRT is getting set as syncmaster then only we store the current tick
+    if(aSyncMasterStatus && !iSyncMasterCurrent)
+        {
+        iStoredTick = iOwnerDocument->TimeContainer()->GetCurTick();
+        #ifdef _DEBUG
+        RDebug::Printf("LRT gets set as Syncmaster \n");
+        #endif
+	    }
+    if(iSyncMasterCurrent != aSyncMasterStatus)
+        {
+        iSyncMasterCurrent = aSyncMasterStatus;    
+        }
+    #ifdef _DEBUG
+	RDebug::Printf("====================================");
+	RDebug::Printf("IStoredTick.iRealTimeTick %d", iStoredTick.iRealTimeTick);
+	RDebug::Printf("iStoredTick.iParentTcTick %d", iStoredTick.iParentTcTick);
+	RDebug::Printf("====================================");
+	#endif
+}
+
+        
+//==========================================================================
+/**
+* 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 S60 3.2
+* @param none.
+* @return TBool True if can generate timing tick.
+*/
+// LRT can always generate tick, it acts as a pseudo realtime
+TBool  CSvgLockedRealTimeEntity::CanGenerateTick()
+    {
+  return ETrue;  
+    }
+//==========================================================================
+/**
+* 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 S60 3.2
+* @param none.
+* @return TBool True if can use parent's timing tick.
+*/
+//only used in animation purposes
+TBool CSvgLockedRealTimeEntity::CanUseParentTick()
+{
+    return EFalse;
+}
+    
+//==========================================================================
+/**
+* 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 S60 3.2
+* @param aSynctime Time for resync in msecs.
+* @return none.
+*/
+
+void CSvgLockedRealTimeEntity::ResyncTimedEntity( TUint32 /*aSynctime*/ )
+{
+    
+}
+    
+//==========================================================================
+/**
+* This would be used for pausing the locked timed entity while other locked
+* timed entities get loaded.
+* @since S60 3.2
+* @param none.
+* @return none.
+*/
+void  CSvgLockedRealTimeEntity::PauseTimedEntity()
+    {
+        iStoredTick =  iOwnerDocument->TimeContainer()->GetCurTick();
+        iIsPaused = ETrue;
+    }
+//==========================================================================
+/**
+* This would be used for resuming the locked timed entity once all locked
+* timed entities get loaded.
+* @since S60 3.2
+* @param none.
+* @return none.
+*/
+void  CSvgLockedRealTimeEntity::ResumeTimedEntity()
+    {
+        iStoredTick =  iOwnerDocument->TimeContainer()->GetCurTick();
+        iIsPaused = EFalse;
+    }
+//==========================================================================
+/**
+* This would be used for stopping the timed entity.
+* @since S60 3.2
+* @param none.
+* @return none.
+*/
+void CSvgLockedRealTimeEntity::StopTimedEntity()
+    {
+        iStoredTick.iParentTcTick = 0;
+        iStoredTick.iRealTimeTick = 0;
+    }
+
+//==========================================================================
+/* Return the type of class
+@Return Type Enumeration of object type
+@Parameters none
+*/
+TSvgObjectType  CSvgLockedRealTimeEntity::ObjectType()
+    {
+    return ESvgLockedRealTimeEntity;
+    }
+    
+//==========================================================================
+//for animation element
+CSvgTimeContainer* CSvgLockedRealTimeEntity::GetChildTimeContainer()
+    {
+    return NULL;
+    }
+TBool CSvgLockedRealTimeEntity::AnimProcL( MSvgTimerEvent* /*aEvent*/ )
+    {
+    return ETrue;
+    }
+void CSvgLockedRealTimeEntity::ResetAnimationL()  
+    {
+    
+    }
+
+/*******************************End of file*********************************/