svgtopt/SVG/SVGImpl/src/SVGLockedRealTimeEntity.cpp
author hgs
Wed, 03 Nov 2010 18:56:10 +0200
changeset 46 88edb906c587
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
#include "SVGLockedRealTimeEntity.h"
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
CSvgLockedRealTimeEntity* CSvgLockedRealTimeEntity::NewL(CSvgDocumentImpl* aDoc)
hgs
parents:
diff changeset
    20
    {
hgs
parents:
diff changeset
    21
    CSvgLockedRealTimeEntity* self = new (ELeave) CSvgLockedRealTimeEntity(aDoc);
hgs
parents:
diff changeset
    22
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
    23
    self->ConstructL(aDoc);
hgs
parents:
diff changeset
    24
    CleanupStack::Pop(self);
hgs
parents:
diff changeset
    25
    return self;
hgs
parents:
diff changeset
    26
    }
hgs
parents:
diff changeset
    27
//==========================================================================
hgs
parents:
diff changeset
    28
void  CSvgLockedRealTimeEntity::ConstructL(CSvgDocumentImpl* aDoc)
hgs
parents:
diff changeset
    29
    {
hgs
parents:
diff changeset
    30
        iOwnerDocument = aDoc;
hgs
parents:
diff changeset
    31
    }
hgs
parents:
diff changeset
    32
//==========================================================================
hgs
parents:
diff changeset
    33
CSvgLockedRealTimeEntity::CSvgLockedRealTimeEntity(CSvgDocumentImpl* aDoc): CSvgMediaElementBase( aDoc ),
hgs
parents:
diff changeset
    34
                            iIsPaused(EFalse),
hgs
parents:
diff changeset
    35
                            iSyncMasterCurrent(EFalse)
hgs
parents:
diff changeset
    36
    {
hgs
parents:
diff changeset
    37
    //SyncBehaviour is locked
hgs
parents:
diff changeset
    38
	//MediaState is ready always
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
    }
hgs
parents:
diff changeset
    41
//==========================================================================
hgs
parents:
diff changeset
    42
CSvgLockedRealTimeEntity::~CSvgLockedRealTimeEntity()
hgs
parents:
diff changeset
    43
    {
hgs
parents:
diff changeset
    44
    
hgs
parents:
diff changeset
    45
    }
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
//==========================================================================
hgs
parents:
diff changeset
    48
//from svgelementimpl
hgs
parents:
diff changeset
    49
void CSvgLockedRealTimeEntity::Print(TInt /*aValue*/)
hgs
parents:
diff changeset
    50
    {
hgs
parents:
diff changeset
    51
    
hgs
parents:
diff changeset
    52
    }
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
//==========================================================================
hgs
parents:
diff changeset
    55
/**
hgs
parents:
diff changeset
    56
* The parent time container provides the timing clock to 
hgs
parents:
diff changeset
    57
* the timed entity (audio, video, animation, document) 
hgs
parents:
diff changeset
    58
* using this routine.
hgs
parents:
diff changeset
    59
* @since S60 3.2
hgs
parents:
diff changeset
    60
* @param aTick Current tick information 
hgs
parents:
diff changeset
    61
* @return none.
hgs
parents:
diff changeset
    62
*/
hgs
parents:
diff changeset
    63
void CSvgLockedRealTimeEntity::ParentTimeContainerTick( TSvgTick /*aTick*/ )
hgs
parents:
diff changeset
    64
{
hgs
parents:
diff changeset
    65
    
hgs
parents:
diff changeset
    66
}
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
//==========================================================================
hgs
parents:
diff changeset
    69
/**
hgs
parents:
diff changeset
    70
* Returns the sync behavior of the entity.
hgs
parents:
diff changeset
    71
* @since S60 3.2
hgs
parents:
diff changeset
    72
* @param none. 
hgs
parents:
diff changeset
    73
* @return TSvgSyncBehaviour Element's Sync Behaviour.
hgs
parents:
diff changeset
    74
*/
hgs
parents:
diff changeset
    75
TSvgSyncBehaviour CSvgLockedRealTimeEntity::GetEntitySyncBehavior()
hgs
parents:
diff changeset
    76
{
hgs
parents:
diff changeset
    77
    return ESvgSyncLocked;
hgs
parents:
diff changeset
    78
}
hgs
parents:
diff changeset
    79
        
hgs
parents:
diff changeset
    80
//==========================================================================
hgs
parents:
diff changeset
    81
/**
hgs
parents:
diff changeset
    82
* When the timed entity acts as timing master in the time container, 
hgs
parents:
diff changeset
    83
* the time container gets the timed entity clock using this method 
hgs
parents:
diff changeset
    84
* and feeds to rest of timed entities.
hgs
parents:
diff changeset
    85
* @since S60 3.2
hgs
parents:
diff changeset
    86
* @param aEntityCurTime Current Entity Time in msecs. 
hgs
parents:
diff changeset
    87
* @return none.
hgs
parents:
diff changeset
    88
*/
hgs
parents:
diff changeset
    89
void  CSvgLockedRealTimeEntity::GetEntityCurrentTime( TUint32& aEntityCurTime )
hgs
parents:
diff changeset
    90
    {
hgs
parents:
diff changeset
    91
    //Keep returning the same time if the entity is paused
hgs
parents:
diff changeset
    92
    if(iIsPaused)
hgs
parents:
diff changeset
    93
        {
hgs
parents:
diff changeset
    94
            aEntityCurTime = iStoredTick.iParentTcTick;
hgs
parents:
diff changeset
    95
        }
hgs
parents:
diff changeset
    96
    //add the relative time difference in realtimetick to parenttick
hgs
parents:
diff changeset
    97
    else
hgs
parents:
diff changeset
    98
        {
hgs
parents:
diff changeset
    99
            TSvgTick curTick = iOwnerDocument->TimeContainer()->GetCurTick();
hgs
parents:
diff changeset
   100
            TInt32 delta = curTick.iRealTimeTick - iStoredTick.iRealTimeTick;
hgs
parents:
diff changeset
   101
            
hgs
parents:
diff changeset
   102
            if(delta < 0)
hgs
parents:
diff changeset
   103
                delta = 0;
hgs
parents:
diff changeset
   104
            
hgs
parents:
diff changeset
   105
            aEntityCurTime = iStoredTick.iParentTcTick + delta;
hgs
parents:
diff changeset
   106
            
hgs
parents:
diff changeset
   107
        }
hgs
parents:
diff changeset
   108
    }
hgs
parents:
diff changeset
   109
//==========================================================================
hgs
parents:
diff changeset
   110
/**
hgs
parents:
diff changeset
   111
* Returns the configured sync master value(as per DOM tree) as specified 
hgs
parents:
diff changeset
   112
* in the SVG content.
hgs
parents:
diff changeset
   113
* @since S60 3.2
hgs
parents:
diff changeset
   114
* @param aIsSyncMaster Indicates whether the element is configured as 
hgs
parents:
diff changeset
   115
*                      Sync Master. 
hgs
parents:
diff changeset
   116
* Locked Real Time Entity can never be configured as syncmaster hence
hgs
parents:
diff changeset
   117
* This implementation is NULL
hgs
parents:
diff changeset
   118
* @return none.
hgs
parents:
diff changeset
   119
*/
hgs
parents:
diff changeset
   120
void CSvgLockedRealTimeEntity::GetCnfSyncMasterStatus( TBool& /*aIsSyncMaster*/ )
hgs
parents:
diff changeset
   121
{
hgs
parents:
diff changeset
   122
    
hgs
parents:
diff changeset
   123
}
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
//==========================================================================
hgs
parents:
diff changeset
   126
/**
hgs
parents:
diff changeset
   127
* Check if timed entity is going to act as timing master in the 
hgs
parents:
diff changeset
   128
* time container. This behavior could change dynamically.
hgs
parents:
diff changeset
   129
* @since S60 3.2
hgs
parents:
diff changeset
   130
* @param aIsSyncMaster Indicates whether the element is currrently Sync Master. 
hgs
parents:
diff changeset
   131
* @return none.
hgs
parents:
diff changeset
   132
*/
hgs
parents:
diff changeset
   133
void CSvgLockedRealTimeEntity::GetCurSyncMasterStatus( TBool& isSyncMaster )
hgs
parents:
diff changeset
   134
{
hgs
parents:
diff changeset
   135
        isSyncMaster = iSyncMasterCurrent;
hgs
parents:
diff changeset
   136
}
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
//==========================================================================
hgs
parents:
diff changeset
   139
/** If some other element is resolved as syncMaster in the time container group, 
hgs
parents:
diff changeset
   140
* this element can not act as sync master. 
hgs
parents:
diff changeset
   141
* @since S60 3.2
hgs
parents:
diff changeset
   142
* @param aSyncMasterStatus Indicates whether the element is currrently 
hgs
parents:
diff changeset
   143
*                          Sync Master. 
hgs
parents:
diff changeset
   144
* @return none.
hgs
parents:
diff changeset
   145
*/
hgs
parents:
diff changeset
   146
void CSvgLockedRealTimeEntity::SetCurSyncMasterStatus( TBool aSyncMasterStatus )
hgs
parents:
diff changeset
   147
{
hgs
parents:
diff changeset
   148
    //iSyncMasterCurrent stores current Mastership status of LRT
hgs
parents:
diff changeset
   149
    // only if LRT is getting set as syncmaster then only we store the current tick
hgs
parents:
diff changeset
   150
    if(aSyncMasterStatus && !iSyncMasterCurrent)
hgs
parents:
diff changeset
   151
        {
hgs
parents:
diff changeset
   152
        iStoredTick = iOwnerDocument->TimeContainer()->GetCurTick();
hgs
parents:
diff changeset
   153
        #ifdef _DEBUG
hgs
parents:
diff changeset
   154
        RDebug::Printf("LRT gets set as Syncmaster \n");
hgs
parents:
diff changeset
   155
        #endif
hgs
parents:
diff changeset
   156
	    }
hgs
parents:
diff changeset
   157
    if(iSyncMasterCurrent != aSyncMasterStatus)
hgs
parents:
diff changeset
   158
        {
hgs
parents:
diff changeset
   159
        iSyncMasterCurrent = aSyncMasterStatus;    
hgs
parents:
diff changeset
   160
        }
hgs
parents:
diff changeset
   161
    #ifdef _DEBUG
hgs
parents:
diff changeset
   162
	RDebug::Printf("====================================");
hgs
parents:
diff changeset
   163
	RDebug::Printf("IStoredTick.iRealTimeTick %d", iStoredTick.iRealTimeTick);
hgs
parents:
diff changeset
   164
	RDebug::Printf("iStoredTick.iParentTcTick %d", iStoredTick.iParentTcTick);
hgs
parents:
diff changeset
   165
	RDebug::Printf("====================================");
hgs
parents:
diff changeset
   166
	#endif
hgs
parents:
diff changeset
   167
}
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
        
hgs
parents:
diff changeset
   170
//==========================================================================
hgs
parents:
diff changeset
   171
/**
hgs
parents:
diff changeset
   172
* Check if timed entity can provide timing ticks to rest of time 
hgs
parents:
diff changeset
   173
* container elements. This behavior could change dynamically. 
hgs
parents:
diff changeset
   174
* For example, if audio clip is over, the audio element can't generate 
hgs
parents:
diff changeset
   175
* ticks for others.
hgs
parents:
diff changeset
   176
* @since S60 3.2
hgs
parents:
diff changeset
   177
* @param none.
hgs
parents:
diff changeset
   178
* @return TBool True if can generate timing tick.
hgs
parents:
diff changeset
   179
*/
hgs
parents:
diff changeset
   180
// LRT can always generate tick, it acts as a pseudo realtime
hgs
parents:
diff changeset
   181
TBool  CSvgLockedRealTimeEntity::CanGenerateTick()
hgs
parents:
diff changeset
   182
    {
hgs
parents:
diff changeset
   183
  return ETrue;  
hgs
parents:
diff changeset
   184
    }
hgs
parents:
diff changeset
   185
//==========================================================================
hgs
parents:
diff changeset
   186
/**
hgs
parents:
diff changeset
   187
* Check if timed entity can use its parent's tick. Usually only the
hgs
parents:
diff changeset
   188
* parent document should return true for this function.
hgs
parents:
diff changeset
   189
* All other elements return false
hgs
parents:
diff changeset
   190
* @since S60 3.2
hgs
parents:
diff changeset
   191
* @param none.
hgs
parents:
diff changeset
   192
* @return TBool True if can use parent's timing tick.
hgs
parents:
diff changeset
   193
*/
hgs
parents:
diff changeset
   194
//only used in animation purposes
hgs
parents:
diff changeset
   195
TBool CSvgLockedRealTimeEntity::CanUseParentTick()
hgs
parents:
diff changeset
   196
{
hgs
parents:
diff changeset
   197
    return EFalse;
hgs
parents:
diff changeset
   198
}
hgs
parents:
diff changeset
   199
    
hgs
parents:
diff changeset
   200
//==========================================================================
hgs
parents:
diff changeset
   201
/**
hgs
parents:
diff changeset
   202
* If the timed entity needs to be in sync with the time container and 
hgs
parents:
diff changeset
   203
* it has slipped beyond the sync tolerance limit, the method is called to 
hgs
parents:
diff changeset
   204
* bring the element in sync with the time container.
hgs
parents:
diff changeset
   205
* @since S60 3.2
hgs
parents:
diff changeset
   206
* @param aSynctime Time for resync in msecs.
hgs
parents:
diff changeset
   207
* @return none.
hgs
parents:
diff changeset
   208
*/
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
void CSvgLockedRealTimeEntity::ResyncTimedEntity( TUint32 /*aSynctime*/ )
hgs
parents:
diff changeset
   211
{
hgs
parents:
diff changeset
   212
    
hgs
parents:
diff changeset
   213
}
hgs
parents:
diff changeset
   214
    
hgs
parents:
diff changeset
   215
//==========================================================================
hgs
parents:
diff changeset
   216
/**
hgs
parents:
diff changeset
   217
* This would be used for pausing the locked timed entity while other locked
hgs
parents:
diff changeset
   218
* timed entities get loaded.
hgs
parents:
diff changeset
   219
* @since S60 3.2
hgs
parents:
diff changeset
   220
* @param none.
hgs
parents:
diff changeset
   221
* @return none.
hgs
parents:
diff changeset
   222
*/
hgs
parents:
diff changeset
   223
void  CSvgLockedRealTimeEntity::PauseTimedEntity()
hgs
parents:
diff changeset
   224
    {
hgs
parents:
diff changeset
   225
        iStoredTick =  iOwnerDocument->TimeContainer()->GetCurTick();
hgs
parents:
diff changeset
   226
        iIsPaused = ETrue;
hgs
parents:
diff changeset
   227
    }
hgs
parents:
diff changeset
   228
//==========================================================================
hgs
parents:
diff changeset
   229
/**
hgs
parents:
diff changeset
   230
* This would be used for resuming the locked timed entity once all locked
hgs
parents:
diff changeset
   231
* timed entities get loaded.
hgs
parents:
diff changeset
   232
* @since S60 3.2
hgs
parents:
diff changeset
   233
* @param none.
hgs
parents:
diff changeset
   234
* @return none.
hgs
parents:
diff changeset
   235
*/
hgs
parents:
diff changeset
   236
void  CSvgLockedRealTimeEntity::ResumeTimedEntity()
hgs
parents:
diff changeset
   237
    {
hgs
parents:
diff changeset
   238
        iStoredTick =  iOwnerDocument->TimeContainer()->GetCurTick();
hgs
parents:
diff changeset
   239
        iIsPaused = EFalse;
hgs
parents:
diff changeset
   240
    }
hgs
parents:
diff changeset
   241
//==========================================================================
hgs
parents:
diff changeset
   242
/**
hgs
parents:
diff changeset
   243
* This would be used for stopping the timed entity.
hgs
parents:
diff changeset
   244
* @since S60 3.2
hgs
parents:
diff changeset
   245
* @param none.
hgs
parents:
diff changeset
   246
* @return none.
hgs
parents:
diff changeset
   247
*/
hgs
parents:
diff changeset
   248
void CSvgLockedRealTimeEntity::StopTimedEntity()
hgs
parents:
diff changeset
   249
    {
hgs
parents:
diff changeset
   250
        iStoredTick.iParentTcTick = 0;
hgs
parents:
diff changeset
   251
        iStoredTick.iRealTimeTick = 0;
hgs
parents:
diff changeset
   252
    }
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
//==========================================================================
hgs
parents:
diff changeset
   255
/* Return the type of class
hgs
parents:
diff changeset
   256
@Return Type Enumeration of object type
hgs
parents:
diff changeset
   257
@Parameters none
hgs
parents:
diff changeset
   258
*/
hgs
parents:
diff changeset
   259
TSvgObjectType  CSvgLockedRealTimeEntity::ObjectType()
hgs
parents:
diff changeset
   260
    {
hgs
parents:
diff changeset
   261
    return ESvgLockedRealTimeEntity;
hgs
parents:
diff changeset
   262
    }
hgs
parents:
diff changeset
   263
    
hgs
parents:
diff changeset
   264
//==========================================================================
hgs
parents:
diff changeset
   265
//for animation element
hgs
parents:
diff changeset
   266
CSvgTimeContainer* CSvgLockedRealTimeEntity::GetChildTimeContainer()
hgs
parents:
diff changeset
   267
    {
hgs
parents:
diff changeset
   268
    return NULL;
hgs
parents:
diff changeset
   269
    }
hgs
parents:
diff changeset
   270
TBool CSvgLockedRealTimeEntity::AnimProcL( MSvgTimerEvent* /*aEvent*/ )
hgs
parents:
diff changeset
   271
    {
hgs
parents:
diff changeset
   272
    return ETrue;
hgs
parents:
diff changeset
   273
    }
hgs
parents:
diff changeset
   274
void CSvgLockedRealTimeEntity::ResetAnimationL()  
hgs
parents:
diff changeset
   275
    {
hgs
parents:
diff changeset
   276
    
hgs
parents:
diff changeset
   277
    }
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
/*******************************End of file*********************************/