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 FUiAnimVisualElementAnimation.cpp
20 * @brief This file contains implementation of VisualElementAnimation class
22 * This file contains implementation VisualElementAnimation class.
26 #include <FBaseSysLog.h>
27 #include <FBaseColHashMap.h>
29 #include <FUiAnimVisualElementAnimation.h>
31 #include "FUiAnim_TimingFunction.h"
32 #include "FUiAnim_VisualElementAnimationImpl.h"
34 namespace Tizen { namespace Ui { namespace Animations
43 // TODO: may need lock for multi thread
44 pTimingFunctions = new (std::nothrow) Tizen::Base::Collection::HashMap();
45 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctions, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
47 result r = pTimingFunctions->Construct();
50 delete pTimingFunctions;
51 pTimingFunctions = null;
57 // Add timing functions to map
59 LinearTimingFunction* pTimingFunctionLinear = new (std::nothrow) LinearTimingFunction();
60 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionLinear, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
62 Tizen::Base::String* pKeyLinear = new (std::nothrow) Tizen::Base::String(L"Linear");
63 SysTryReturnVoidResult(NID_UI_ANIM, pKeyLinear, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
65 pKeyLinear->ToLower();
66 pTimingFunctions->Add(*pKeyLinear, *pTimingFunctionLinear);
69 EaseInTimingFunction* pTimingFunctionEaseIn = new (std::nothrow) EaseInTimingFunction();
70 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionEaseIn, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
72 Tizen::Base::String* pKeyEaseIn = new (std::nothrow) Tizen::Base::String(L"EaseIn");
73 SysTryReturnVoidResult(NID_UI_ANIM, pKeyEaseIn, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
75 pKeyEaseIn->ToLower();
76 pTimingFunctions->Add(*pKeyEaseIn, *pTimingFunctionEaseIn);
79 EaseOutTimingFunction* pTimingFunctionEaseOut = new (std::nothrow) EaseOutTimingFunction();
80 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionEaseOut, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
82 Tizen::Base::String* pKeyEaseOut = new (std::nothrow) Tizen::Base::String(L"EaseOut");
83 SysTryReturnVoidResult(NID_UI_ANIM, pKeyEaseOut, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
85 pKeyEaseOut->ToLower();
86 pTimingFunctions->Add(*pKeyEaseOut, *pTimingFunctionEaseOut);
89 EaseInOutTimingFunction* pTimingFunctionEaseInOut = new (std::nothrow) EaseInOutTimingFunction();
90 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionEaseInOut, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
92 Tizen::Base::String* pKeyEaseInOut = new (std::nothrow) Tizen::Base::String(L"EaseInOut");
93 SysTryReturnVoidResult(NID_UI_ANIM, pKeyEaseInOut, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
95 pKeyEaseInOut->ToLower();
96 pTimingFunctions->Add(*pKeyEaseInOut, *pTimingFunctionEaseInOut);
99 EaseOutInTimingFunction* pTimingFunctionEaseOutIn = new (std::nothrow) EaseOutInTimingFunction();
100 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionEaseOutIn, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
102 Tizen::Base::String* pKeyEaseOutIn = new (std::nothrow) Tizen::Base::String(L"EaseOutIn");
103 SysTryReturnVoidResult(NID_UI_ANIM, pKeyEaseOutIn, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
105 pKeyEaseOutIn->ToLower();
106 pTimingFunctions->Add(*pKeyEaseOutIn, *pTimingFunctionEaseOutIn);
109 DiscreteTimingFunction* pTimingFunctionDiscrete = new (std::nothrow) DiscreteTimingFunction();
110 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionDiscrete, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
112 Tizen::Base::String* pKeyDiscrete = new (std::nothrow) Tizen::Base::String(L"Discrete");
113 SysTryReturnVoidResult(NID_UI_ANIM, pKeyDiscrete, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
115 pKeyDiscrete->ToLower();
116 pTimingFunctions->Add(*pKeyDiscrete, *pTimingFunctionDiscrete);
119 BezierTimingFunction* pTimingFunctionBezier = new (std::nothrow) BezierTimingFunction();
120 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionBezier, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
122 Tizen::Base::String* pKeyBezier = new (std::nothrow) Tizen::Base::String(L"Bezier");
123 SysTryReturnVoidResult(NID_UI_ANIM, pKeyBezier, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
125 pKeyBezier->ToLower();
126 pTimingFunctions->Add(*pKeyBezier, *pTimingFunctionBezier);
129 ExpInTimingFunction* pTimingFunctionExpIn = new (std::nothrow) ExpInTimingFunction();
130 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionExpIn, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
132 Tizen::Base::String* pKeyExpIn = new (std::nothrow) Tizen::Base::String(L"ExpIn");
133 SysTryReturnVoidResult(NID_UI_ANIM, pKeyExpIn, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
135 pKeyExpIn->ToLower();
136 pTimingFunctions->Add(*pKeyExpIn, *pTimingFunctionExpIn);
139 ExpOutTimingFunction* pTimingFunctionExpOut = new (std::nothrow) ExpOutTimingFunction();
140 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionExpOut, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
142 Tizen::Base::String* pKeyExpOut = new (std::nothrow) Tizen::Base::String(L"ExpOut");
143 SysTryReturnVoidResult(NID_UI_ANIM, pKeyExpOut, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
145 pKeyExpOut->ToLower();
146 pTimingFunctions->Add(*pKeyExpOut, *pTimingFunctionExpOut);
149 EaseElasticInTimingFunction* pTimingFunctionEaseElasticIn = new (std::nothrow) EaseElasticInTimingFunction();
150 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionEaseElasticIn, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
152 Tizen::Base::String* pKeyEaseElasticIn = new (std::nothrow) Tizen::Base::String(L"EaseElasticIn");
153 SysTryReturnVoidResult(NID_UI_ANIM, pKeyEaseElasticIn, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
155 pKeyEaseElasticIn->ToLower();
156 pTimingFunctions->Add(*pKeyEaseElasticIn, *pTimingFunctionEaseElasticIn);
159 EaseElasticOutTimingFunction* pTimingFunctionEaseElasticOut = new (std::nothrow) EaseElasticOutTimingFunction();
160 SysTryReturnVoidResult(NID_UI_ANIM, pTimingFunctionEaseElasticOut, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
162 Tizen::Base::String* pKeyEaseElasticOut = new (std::nothrow) Tizen::Base::String(L"EaseElasticOut");
163 SysTryReturnVoidResult(NID_UI_ANIM, pKeyEaseElasticOut, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
165 pKeyEaseElasticOut->ToLower();
166 pTimingFunctions->Add(*pKeyEaseElasticOut, *pTimingFunctionEaseElasticOut);
171 if (pTimingFunctions)
173 pTimingFunctions->RemoveAll(true);
176 delete pTimingFunctions;
177 pTimingFunctions = null;
183 static _Singleton inst;
191 static pthread_once_t once_block = PTHREAD_ONCE_INIT;
194 pthread_once(&once_block, InitSingleton);
202 Tizen::Base::Collection::HashMap* pTimingFunctions;
205 _Singleton(const _Singleton& rhs);
206 _Singleton& operator =(const _Singleton& rhs);
207 static _Singleton* __pInstance;
211 _Singleton* _Singleton::__pInstance = null;
213 VisualElementAnimation::VisualElementAnimation(void)
217 _pAnimationImpl = new (std::nothrow) _VisualElementAnimationImpl();
218 if (_pAnimationImpl == null)
220 SetLastResult(E_OUT_OF_MEMORY);
224 VisualElementAnimation::~VisualElementAnimation(void)
228 delete _pAnimationImpl;
229 _pAnimationImpl = null;
233 VisualElementAnimation::VisualElementAnimation(_VisualElementAnimationImpl* pAnimationImpl)
234 : _pAnimationImpl(pAnimationImpl)
239 VisualElementAnimation::VisualElementAnimation(const VisualElementAnimation& animation)
240 : _pAnimationImpl(null)
244 _pAnimationImpl = new (std::nothrow) _VisualElementAnimationImpl(*(animation._pAnimationImpl));
245 SysTryReturnVoidResult(NID_UI_ANIM, (_pAnimationImpl != null), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
248 VisualElementAnimation&
249 VisualElementAnimation::operator =(const VisualElementAnimation& rhs)
253 result r = _pAnimationImpl->CopyAnimationValue(*(rhs._pAnimationImpl));
254 SysTryReturn(NID_UI_ANIM, (r == E_SUCCESS), *this, r, "[%s] Failed to copy the animation value.", GetErrorMessage(r));
261 VisualElementAnimation::operator ==(const VisualElementAnimation& rhs) const
268 return (_pAnimationImpl->Equals(*(rhs._pAnimationImpl)));
272 VisualElementAnimation::operator !=(const VisualElementAnimation& rhs) const
274 return (!operator == (rhs));
278 VisualElementAnimation::Equals(const Tizen::Base::Object& obj) const
280 const VisualElementAnimation* pAnimation = dynamic_cast< const VisualElementAnimation* >(&obj);
282 if (pAnimation == null)
287 return (*this == *pAnimation);
291 VisualElementAnimation::GetHashCode(void) const
293 return _pAnimationImpl->GetHashCode();
296 VisualElementAnimation*
297 VisualElementAnimation::CloneN(void) const
299 VisualElementAnimation* pCloned = new (std::nothrow) VisualElementAnimation(*this);
300 SysTryReturn(NID_UI_ANIM, (pCloned != null), null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
306 VisualElementAnimation::SetVisualElementAnimationStatusEventListener(IVisualElementAnimationStatusEventListener* pListener)
308 _pAnimationImpl->SetStatusEventListener(pListener);
311 IVisualElementAnimationStatusEventListener*
312 VisualElementAnimation::GetVisualElementAnimationStatusEventListener(void) const
314 return _pAnimationImpl->GetStatusEventListener();
318 VisualElementAnimation::SetTimingFunction(const IVisualElementAnimationTimingFunction* pTimingFunction)
320 _pAnimationImpl->SetTimingFunction(pTimingFunction);
323 const IVisualElementAnimationTimingFunction*
324 VisualElementAnimation::GetTimingFunction(void) const
326 return _pAnimationImpl->GetTimingFunction();
330 VisualElementAnimation::SetValueInterpolator(const IVisualElementAnimationValueInterpolator* pInterpolator)
332 _pAnimationImpl->SetValueInterpolator(pInterpolator);
335 const IVisualElementAnimationValueInterpolator*
336 VisualElementAnimation::GetValueInterpolator(void) const
338 return _pAnimationImpl->GetValueInterpolator();
342 VisualElementAnimation::SetDuration(long milliseconds)
344 SysTryReturnResult(NID_UI_ANIM, (milliseconds >= 0 && milliseconds >= _pAnimationImpl->GetOffset()),
345 E_INVALID_ARG, "Invalid argument(s) is used. milliseconds = %ld", milliseconds);
347 _pAnimationImpl->SetDuration(milliseconds);
353 VisualElementAnimation::GetDuration(void) const
355 return _pAnimationImpl->GetDuration();
359 VisualElementAnimation::SetOffset(long milliseconds)
361 SysTryReturnResult(NID_UI_ANIM, (milliseconds >= 0 && milliseconds <= _pAnimationImpl->GetDuration()),
362 E_INVALID_ARG, "Invalid argument(s) is used. milliseconds = %ld", milliseconds);
364 _pAnimationImpl->SetOffset(milliseconds);
370 VisualElementAnimation::GetOffset(void) const
372 return _pAnimationImpl->GetOffset();
376 VisualElementAnimation::SetDelay(long milliseconds)
378 SysTryReturnResult(NID_UI_ANIM, (milliseconds >= 0), E_INVALID_ARG, "Invalid argument(s) is used. milliseconds = %ld", milliseconds);
380 _pAnimationImpl->SetDelay(milliseconds);
386 VisualElementAnimation::GetDelay(void) const
388 return _pAnimationImpl->GetDelay();
392 VisualElementAnimation::SetRepeatCount(long count)
394 SysTryReturnResult(NID_UI_ANIM, (count >= 0), E_INVALID_ARG, "Invalid argument(s) is used. count = %ld", count);
396 _pAnimationImpl->SetRepeatCount(count);
402 VisualElementAnimation::GetRepeatCount(void) const
404 return _pAnimationImpl->GetRepeatCount();
408 VisualElementAnimation::SetAutoReverseEnabled(bool autoReverse)
410 _pAnimationImpl->SetAutoReverseEnabled(autoReverse);
414 VisualElementAnimation::IsAutoReverseEnabled(void) const
416 return _pAnimationImpl->IsAutoReverseEnabled();
420 VisualElementAnimation::SetScaleRatio(float scaleRatio)
422 SysTryReturnResult(NID_UI_ANIM, (scaleRatio > 0.f), E_INVALID_ARG, "Invalid argument(s) is used. scaleRatio = %f", scaleRatio);
424 _pAnimationImpl->SetScaleRatio(scaleRatio);
430 VisualElementAnimation::GetScaleRatio(void) const
432 return _pAnimationImpl->GetScaleRatio();
436 VisualElementAnimation::SetUserData(void* pUserData)
438 _pAnimationImpl->SetUserData(pUserData);
442 VisualElementAnimation::GetUserData(void) const
444 return _pAnimationImpl->GetUserData();
447 const IVisualElementAnimationTimingFunction*
448 VisualElementAnimation::GetTimingFunctionByName(const Tizen::Base::String& name)
450 _Singleton* pInstance = _Singleton::GetInstance();
452 SysTryReturn(NID_UI_ANIM, pInstance, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
453 SysTryReturn(NID_UI_ANIM, pInstance->pTimingFunctions, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
455 const_cast< Tizen::Base::String& >(name).ToLower();
457 IVisualElementAnimationTimingFunction* pTimingFunction = dynamic_cast< IVisualElementAnimationTimingFunction* >(pInstance->pTimingFunctions->GetValue(name));
459 SysTryReturn(NID_UI_ANIM, pTimingFunction, null, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(s) is used. name = %ls.", name.GetPointer());
461 return pTimingFunction;
464 }}} // Tizen::Ui::Animations