2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FUiAnim_VisualElementValueAnimationImpl.cpp
20 * @brief This file contains implementation of _VisualElementValueAnimationImpl class
22 * This file contains implementation _VisualElementValueAnimationImpl class.
25 #include <FBaseSysLog.h>
27 #include <FUiAnimVisualElementValueAnimation.h>
28 #include <FUiAnimIVisualElementAnimationTickEventListener.h>
30 #include "FUiAnim_VisualElementAnimationKeyFrame.h"
31 #include "FUiAnim_VisualElementValueAnimationImpl.h"
33 namespace Tizen { namespace Ui { namespace Animations
37 _VisualElementValueAnimationImpl::_VisualElementValueAnimationImpl(void)
38 : __pTickListener(null)
39 , __applyEndValue(true)
45 _VisualElementValueAnimationImpl::_VisualElementValueAnimationImpl(const _VisualElementValueAnimationImpl& animationImpl)
46 : __pTickListener(null)
47 , __applyEndValue(true)
50 result r = CopyAnimationValue(animationImpl);
52 SysTryReturnVoidResult(NID_UI_ANIM, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
55 _VisualElementValueAnimationImpl::~_VisualElementValueAnimationImpl(void)
65 _VisualElementValueAnimationImpl::Equals(const Tizen::Base::Object& obj) const
72 const _VisualElementValueAnimationImpl* pAnimationImpl = dynamic_cast< const _VisualElementValueAnimationImpl* >(&obj);
74 if (pAnimationImpl == null)
79 bool isKeyFrameEqual = false;
81 if (__pKeyFrame != null && pAnimationImpl->__pKeyFrame != null)
83 isKeyFrameEqual = __pKeyFrame->Equals(*(pAnimationImpl->__pKeyFrame));
85 else if (__pKeyFrame == null && pAnimationImpl->__pKeyFrame == null)
87 isKeyFrameEqual = true;
90 return (_VisualElementAnimationImpl::Equals(obj)
91 && (__pTickListener == pAnimationImpl->__pTickListener)
92 && (__start == pAnimationImpl->__start)
93 && (__end == pAnimationImpl->__end)
94 && (__applyEndValue == pAnimationImpl->__applyEndValue)
95 && (isKeyFrameEqual));
99 _VisualElementValueAnimationImpl::GetHashCode(void) const
101 return (_VisualElementAnimationImpl::GetHashCode() + __start.GetHashCode() + __end.GetHashCode() + __applyEndValue);
105 _VisualElementValueAnimationImpl::CopyAnimationValue(const _VisualElementValueAnimationImpl& animationImpl)
107 result r = _VisualElementAnimationImpl::CopyAnimationValue(animationImpl);
108 SysTryReturnResult(NID_UI_ANIM, (r == E_SUCCESS), r, "Propagating.");
110 __pTickListener = animationImpl.__pTickListener;
111 __start = animationImpl.__start;
112 __end = animationImpl.__end;
113 __applyEndValue = animationImpl.__applyEndValue;
115 if (animationImpl.__pKeyFrame != null)
117 __pKeyFrame = animationImpl.__pKeyFrame->CloneN();
118 SysTryReturnResult(NID_UI_ANIM, (__pKeyFrame != null), E_OUT_OF_MEMORY, "Memory allocation failed.");
125 _VisualElementValueAnimationImpl::SetTickEventListener(IVisualElementAnimationTickEventListener* pListener)
127 __pTickListener = pListener;
130 IVisualElementAnimationTickEventListener*
131 _VisualElementValueAnimationImpl::GetTickEventListener(void) const
133 return __pTickListener;
137 _VisualElementValueAnimationImpl::SetStartValue(const Variant& startValue)
139 __start = startValue;
143 _VisualElementValueAnimationImpl::GetStartValue(void) const
149 _VisualElementValueAnimationImpl::SetEndValue(const Variant& endValue)
155 _VisualElementValueAnimationImpl::GetEndValue(void) const
161 _VisualElementValueAnimationImpl::SetEndValueApplied(bool apply)
163 __applyEndValue = apply;
167 _VisualElementValueAnimationImpl::IsEndValueApplied(void) const
169 return __applyEndValue;
173 _VisualElementValueAnimationImpl::AddKeyFrame(float timeProgress, const Tizen::Ui::Variant& value, const IVisualElementAnimationTimingFunction* pTimingFunction)
175 if (__pKeyFrame == null)
177 __pKeyFrame = new (std::nothrow) _VisualElementAnimationKeyFrame();
178 SysTryReturnResult(NID_UI_ANIM, (__pKeyFrame != null), E_OUT_OF_MEMORY, "Memory allocation failed.");
182 _VisualElementAnimationKeyFrameInfo* pInfo = __pKeyFrame->GetKeyFrameInfoAt(0);
183 SysAssertf(pInfo != null, "Key frame with index 0 is null.");
185 SysTryReturnResult(NID_UI_ANIM, (pInfo->GetValue().GetType() == value.GetType()), E_INVALID_ARG, "Invalid argument(s) is used. The value type is different from another");
188 return __pKeyFrame->AddKeyFrame(timeProgress, value, pTimingFunction);
192 _VisualElementValueAnimationImpl::RemoveKeyFrame(float timeProgress)
194 if (__pKeyFrame == null)
196 return E_OBJ_NOT_FOUND;
199 result r = __pKeyFrame->RemoveKeyFrame(timeProgress);
201 if (__pKeyFrame->GetCount() == 0)
211 _VisualElementValueAnimationImpl::RemoveAllKeyFrames(void)
213 if (__pKeyFrame != null)
215 __pKeyFrame->RemoveAllKeyFrames();
222 _VisualElementValueAnimationImpl*
223 _VisualElementValueAnimationImpl::GetInstance(VisualElementValueAnimation& animation)
225 return dynamic_cast<_VisualElementValueAnimationImpl*>(animation._pAnimationImpl);
228 const _VisualElementValueAnimationImpl*
229 _VisualElementValueAnimationImpl::GetInstance(const VisualElementValueAnimation& animation)
231 return dynamic_cast<const _VisualElementValueAnimationImpl*>(animation._pAnimationImpl);
234 _VisualElementAnimationKeyFrame*
235 _VisualElementValueAnimationImpl::GetKeyFrame(void) const
241 _VisualElementValueAnimationImpl::IsValid(void) const
243 return (IsValidValues() && IsValidKeyFrameType());
247 _VisualElementValueAnimationImpl::IsValidKeyFrameType(void) const
249 if (__pKeyFrame != null)
253 if (__start.IsEmpty() == false)
255 type = __start.GetType();
259 type = __end.GetType();
262 _VisualElementAnimationKeyFrameInfo* pInfo = __pKeyFrame->GetKeyFrameInfoAt(0);
263 SysAssertf(pInfo != null, "Key frame with index 0 is null.");
265 SysTryReturn(NID_UI_ANIM, (pInfo->GetValue().GetType() == type), false, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(s) is used. The types of variant are different.");
272 _VisualElementValueAnimationImpl::IsValidValues(void) const
274 SysTryReturn(NID_UI_ANIM, (__start.IsEmpty() == false && __end.IsEmpty() == false), false, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(s) is used. The start value or end value is invalid.");
275 SysTryReturn(NID_UI_ANIM, (__start.GetType() == __end.GetType()), false, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(s) is used. The types of variant are different.");
281 _VisualElementValueAnimationImpl::OnTickOccurred(VisualElement& target, const Tizen::Ui::Variant& currentValue)
287 }}} // Tizen::Ui::Animations