__baseTime = baseTime;
__adjustedBaseTime = __baseTime;
- if (__status == _STATUS_END)
- {
- __status = _STATUS_READY;
- }
+ // reset for nested group repeat
+ __status = _STATUS_READY;
}
void
bool
_AnimationGroupNode::IsRemovable(void) const
{
- return (__pParent->IsRemovable() && __currentRepeatCount == GetRepeatCount());
+ return (__pParent->IsRemovable() && __currentRepeatCount == GetRepeatCount() && __status != _STATUS_REPEAT);
}
void
case _STATUS_END:
return;
+ case _STATUS_REPEAT:
+ SetChildrenBaseTime(__baseTime + __adjustedBaseTime, false);
+ break;
+
default:
// nothing to do
break;
return;
}
- offset = __animation.GetOffset();
- repeatCount = __animation.GetRepeatCount();
- duration = __animation.GetDuration();
+ offset = GetOffset();
+ repeatCount = GetRepeatCount();
+ duration = GetDuration();
if (duration == 0)
{
duration = 1;
{
__status = _STATUS_REPEAT;
__adjustedBaseTime = delay + duration * (__currentRepeatCount - 1) - offset;
-
- SetChildrenBaseTime(__baseTime + __adjustedBaseTime, false);
}
else
{
__status = _STATUS_RUNNING;
}
+
+ // In case of nested group
+ if (__pParent->GetStatus() == _STATUS_FINISH || __pParent->GetStatus() == _STATUS_REPEAT)
+ {
+ __status = _STATUS_FINISH;
+ }
}
void
_AnimationGroupNode::NotifyTransactionStarted(void)
{
- if (__isCommitted == false || (__status != _STATUS_START && __status != _STATUS_REPEAT))
+ if (__isCommitted == false || __status != _STATUS_START)
{
return;
}
return;
}
- switch (__status)
+ pListener->OnVisualElementAnimationStarted(__animation, __name, pAnimationImpl->GetEventTarget());
+}
+
+void
+_AnimationGroupNode::NotifyTransactionRepeated(void)
+{
+ if (__isCommitted == false || __status != _STATUS_REPEAT)
{
- case _STATUS_START:
- pListener->OnVisualElementAnimationStarted(__animation, __name, pAnimationImpl->GetEventTarget());
- break;
+ return;
+ }
- case _STATUS_REPEAT:
- pListener->OnVisualElementAnimationRepeated(__animation, __name, pAnimationImpl->GetEventTarget(), __currentRepeatCount);
- break;
+ _VisualElementAnimationImpl* pAnimationImpl = _VisualElementAnimationImpl::GetInstance(__animation);
- default:
- break;
+ IVisualElementAnimationStatusEventListener* pListener = pAnimationImpl->GetStatusEventListener();
+
+ if (pListener == null)
+ {
+ return;
}
+
+ pListener->OnVisualElementAnimationRepeated(__animation, __name, pAnimationImpl->GetEventTarget(), __currentRepeatCount);
}
void
return;
}
-#if 0
if (__status != _STATUS_FINISH)
{
__status = _STATUS_FINISH;
}
-#endif
_VisualElementAnimationImpl* pAnimationImpl = _VisualElementAnimationImpl::GetInstance(__animation);
namespace Tizen { namespace Ui { namespace Animations
{
-#define AD_CAST(_AD) static_cast< _AnimationData* >(_AD)
-#define AD_CONST_CAST(_AD) static_cast< _AnimationData* >(const_cast< Object* >(_AD))
-
unsigned int
_AnimationTime::GetTime(bool loopTime)
{
{
__baseTime = baseTime;
- if (__status == _STATUS_END)
- {
- // reset for group repeat
- __status = _STATUS_READY;
- __keyFrameIndex = 0;
- __forward = true;
- }
+ // reset for group repeat
+ __status = _STATUS_READY;
+ __keyFrameIndex = 0;
+ __forward = true;
return E_SUCCESS;
}
result r = __children.Construct();
SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to construct children list.", GetErrorMessage(r));
- r = __pendingAnimations.Construct();
- SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to construct pending list.", GetErrorMessage(r));
-
r = __animations.Construct();
SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to construct animations map.", GetErrorMessage(r));
+
+ r = __pendingAnimations.Construct();
+ SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to construct pending list.", GetErrorMessage(r));
}
_TransactionNode::_TransactionNode(const _TransactionNode& node)
result r = __children.Construct();
SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to construct children list.", GetErrorMessage(r));
- r = __pendingAnimations.Construct();
- SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to construct pending list.", GetErrorMessage(r));
-
r = __animations.Construct();
SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to construct animations map.", GetErrorMessage(r));
+ r = __pendingAnimations.Construct();
+ SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to construct pending list.", GetErrorMessage(r));
+
r = CopyAnimationValue(node);
SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to copy the animation value.", GetErrorMessage(r));
}
{
__children.RemoveAllChildren();
- __pendingAnimations.RemoveAll(true);
+ __pendingAnimations.RemoveAllItems();
RemoveAllAnimations();
}
void
_TransactionNode::RemoveAll(void)
{
- ReservedRemove(true);
+ ReservedRemove();
_TransactionNode* pChild = null;
for (int index = 0; index < animationCount; index++)
{
- pAnimationData = AD_CAST(pAnimationList->GetAt(index));
+ pAnimationData = static_cast< _AnimationData* >(pAnimationList->GetAt(index));
if (pAnimationData->GetName() == keyName)
{
if (pAnimationData->IsRemoved() == false)
{
- r = SetAnimationDataAsPending(*pAnimationData, false);
+ r = AddAnimationDataInPending(*pAnimationData, false);
SysTryReturnResult(NID_UI_ANIM, r == E_SUCCESS, r, "Failed to add to pending list.");
}
for (int index = 0; index < animationCount; index++)
{
- pAnimationData = AD_CAST(pAnimationList->GetAt(index));
+ pAnimationData = static_cast< _AnimationData* >(pAnimationList->GetAt(index));
pPropertyAnimation = dynamic_cast< VisualElementPropertyAnimation* >(&(pAnimationData->GetAnimation()));
if (pPropertyAnimation != null && pPropertyAnimation->GetPropertyName() == property)
{
if (pAnimationData->IsRemoved() == false)
{
- r = SetAnimationDataAsPending(*pAnimationData, false);
+ r = AddAnimationDataInPending(*pAnimationData, false);
SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to add to pending list.", GetErrorMessage(r));
}
}
for (int index = 0; index < animationCount; index++)
{
- pAnimationData = AD_CAST(pAnimationList->GetAt(index));
+ pAnimationData = static_cast< _AnimationData* >(pAnimationList->GetAt(index));
- r = SetAnimationDataAsPending(*pAnimationData, false);
+ r = AddAnimationDataInPending(*pAnimationData, false);
SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Failed to add to pending list.", GetErrorMessage(r));
}
for (int index = 0; index < animationCount; index++)
{
- pAnimationData = AD_CAST(pAnimationList->GetAt(index));
+ pAnimationData = static_cast< _AnimationData* >(pAnimationList->GetAt(index));
if (pAnimationData->GetName() == keyName)
{
}
result
-_TransactionNode::SetAnimationDataAsPending(_AnimationData& animationData, bool completed)
+_TransactionNode::AddAnimationDataInPending(_AnimationData& animationData, bool completed)
{
result r = E_SUCCESS;
return E_SUCCESS;
}
- r = __pendingAnimations.Add(animationData);
+ r = __pendingAnimations.Add(&animationData);
animationData.SetPendingMode(_AnimationData::_PENDING_MODE_REMOVING);
}
void
+_TransactionNode::RemoveAnimationDataInPending(_AnimationData& animationData)
+{
+ animationData.SetStatus(_AnimationData::_STATUS_END);
+
+ animationData.SetPendingMode(_AnimationData::_PENDING_MODE_NONE);
+
+ __pendingAnimations.Remove(&animationData);
+}
+
+void
_TransactionNode::DrawTargets(void)
{
IMapEnumeratorT<VisualElement*, ArrayList*>* pMapEnum = __animations.GetMapEnumeratorN();
for (int index = 0; index < animationCount; index++)
{
- pAnimationData = AD_CAST(pAnimationList->GetAt(index));
+ pAnimationData = static_cast< _AnimationData* >(pAnimationList->GetAt(index));
pAnimationData->SetBaseTime(baseTime);
}
}
void
+_TransactionNode::NotifyTransactionRepeated(void)
+{
+}
+
+void
_TransactionNode::NotifyTransactionFinished(bool completed)
{
if (__isCommitted == false)
for (int index = 0; index < animationCount; index++)
{
- pRemoveAnimationData = AD_CAST(pAnimationList->GetAt(index));
+ pRemoveAnimationData = static_cast< _AnimationData* >(pAnimationList->GetAt(index));
if (&animationData == pRemoveAnimationData)
{
if (pRemovePropertyAnimation && pRemovePropertyAnimation->GetPropertyName() == pPropertyAnimation->GetPropertyName())
{
- result r = SetAnimationDataAsPending(*pRemoveAnimationData, false);
+ result r = AddAnimationDataInPending(*pRemoveAnimationData, false);
SysTryReturn(NID_UI_ANIM, r == E_SUCCESS, r, false, "[%s] Failed to add to pending list.", GetErrorMessage(r));
- //TODO: refactoring for group
if (IsRemovable() == false && pRemoveAnimationData->GetStatus() != _AnimationData::_STATUS_READY)
{
- pRemoveAnimationData->SetStatus(_AnimationData::_STATUS_END);
- pRemoveAnimationData->SetPendingMode(_AnimationData::_PENDING_MODE_NONE);
- __pendingAnimations.Remove(*pRemoveAnimationData, false);
+ RemoveAnimationDataInPending(*pRemoveAnimationData);
}
}
}
for (int index = pendingAnimationCount - 1; index >= 0; index--)
{
- pAnimationData = AD_CAST(__pendingAnimations.GetAt(index));
+ pAnimationData = __pendingAnimations.GetItemAt(index);
if (pAnimationData->GetPendingMode() == _AnimationData::_PENDING_MODE_REMOVE)
{
delete pAnimationList;
}
- __pendingAnimations.RemoveAt(index, false);
+ __pendingAnimations.RemoveAt(index);
}
}
}
pChild->ProcessAnimationTick(tick);
- if (__status == _STATUS_FINISH || pChild->__status == _STATUS_FINISH)
+ if (__status == _STATUS_REPEAT || __status == _STATUS_FINISH || pChild->__status == _STATUS_FINISH)
{
pChild->ReservedRemove();
}
}
}
+
+ NotifyTransactionRepeated();
}
void
for (int index = 0; index < animationCount; index++)
{
- pAnimationData = AD_CAST(pAnimationList->GetAt(index));
+ pAnimationData = static_cast< _AnimationData* >(pAnimationList->GetAt(index));
if (pAnimationData->IsRemoved())
{
pAnimationData->OnTickOccurred(*pTarget, currentValue);
- if (__status == _STATUS_FINISH || pAnimationData->GetStatus() == _AnimationData::_STATUS_FINISH)
+ if (__status == _STATUS_REPEAT || __status == _STATUS_FINISH || pAnimationData->GetStatus() == _AnimationData::_STATUS_FINISH)
{
- SetAnimationDataAsPending(*pAnimationData, true);
+ AddAnimationDataInPending(*pAnimationData, true);
- //TODO: refactoring for group
if (IsRemovable() == false)
{
- pAnimationData->SetPendingMode(_AnimationData::_PENDING_MODE_NONE);
- __pendingAnimations.Remove(*pAnimationData, false);
+ RemoveAnimationDataInPending(*pAnimationData);
}
}
}
bool IsEmpty(void) const;
+ _TransactionStatus GetStatus(void) const { return __status; }
+
bool IsRunning(void) const;
virtual bool IsRemovable(void) const;
virtual void NotifyTransactionStarted(void);
+ virtual void NotifyTransactionRepeated(void);
virtual void NotifyTransactionFinished(bool completed);
void ProcessAnimationTick(unsigned int tick);
const VisualElementAnimation* GetAnimation(VisualElement& target, const Tizen::Base::String& property) const;
- result SetAnimationDataAsPending(_AnimationData& animationData, bool completed);
+ result AddAnimationDataInPending(_AnimationData& animationData, bool completed);
+ void RemoveAnimationDataInPending(_AnimationData& animationData);
void ReservedRemove(bool remove = true);
bool IsReservedRemove(void) const;
}
};
- ChildrenListT __children;
+ class AnimationDataListT : public Tizen::Base::Collection::ArrayListT<_AnimationData*>
+ {
+ public:
+ _AnimationData* GetItemAt(int index) const
+ {
+ _AnimationData* pData = null;
+
+ if (likely(GetAt(index, pData) == E_SUCCESS))
+ {
+ return pData;
+ }
+
+ return null;
+ }
- Tizen::Base::Collection::ArrayList __pendingAnimations;
+ void RemoveAllItems(void)
+ {
+ _AnimationData* pData = null;
+
+ int itemCount = GetCount();
+
+ for (int index = 0; index < itemCount; index++)
+ {
+ if (likely(GetAt(index, pData) == E_SUCCESS))
+ {
+ delete pData;
+ }
+ }
+
+ RemoveAll();
+ }
+ };
class AnimationHashMapT : public Tizen::Base::Collection::HashMapT<VisualElement*, Tizen::Base::Collection::ArrayList*>
{
}
};
+ ChildrenListT __children;
AnimationHashMapT __animations;
+ AnimationDataListT __pendingAnimations;
}; // _TransactionNode
}}} // Tizen::Ui::Animations