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_VisualElementAnimationKeyFrame.cpp
20 * @brief This file contains implementation of _VisualElementAnimationKeyFrame class
22 * This file contains implementation _VisualElementAnimationKeyFrame class.
25 #include <FBaseSysLog.h>
26 #include <FBaseFloat.h>
29 #include "FUiAnim_VariantEx.h"
30 #include "FUiAnim_VisualElementAnimationKeyFrame.h"
32 namespace Tizen { namespace Ui { namespace Animations
35 class _KeyFrameComparer
36 : public Tizen::Base::Collection::IComparer
39 _KeyFrameComparer(void)
43 virtual ~_KeyFrameComparer(void)
47 virtual result Compare(const Tizen::Base::Object& obj1, const Tizen::Base::Object& obj2, int& cmp) const
49 const _VisualElementAnimationKeyFrameInfo* pInfo1 = dynamic_cast <const _VisualElementAnimationKeyFrameInfo*>(&obj1);
50 const _VisualElementAnimationKeyFrameInfo* pInfo2 = dynamic_cast <const _VisualElementAnimationKeyFrameInfo*>(&obj2);
52 SysTryReturnResult(NID_BASE, (pInfo1 != null && pInfo2 != null), E_INVALID_ARG, "Invalid argument(s) is used. Both of the obj1 and obj2 MUST be _VisualElementAnimationKeyFrameInfo.");
54 cmp = Tizen::Base::Float::Compare(pInfo1->GetTime(), pInfo2->GetTime());
60 _VisualElementAnimationKeyFrameInfo::_VisualElementAnimationKeyFrameInfo(float time, const Variant& value, const IVisualElementAnimationTimingFunction* pTimingFunction)
64 , __pTimingFunction(pTimingFunction)
68 _VisualElementAnimationKeyFrameInfo::~_VisualElementAnimationKeyFrameInfo(void)
73 _VisualElementAnimationKeyFrameInfo::Equals(const Tizen::Base::Object& obj) const
75 const _VisualElementAnimationKeyFrameInfo* pKeyFrameInfo = dynamic_cast< const _VisualElementAnimationKeyFrameInfo* >(&obj);
77 if (pKeyFrameInfo == null)
83 (_FloatCompare(__time, pKeyFrameInfo->__time))
84 && (__valueEx == pKeyFrameInfo->__valueEx)
85 && (__pTimingFunction == pKeyFrameInfo->__pTimingFunction)
90 _VisualElementAnimationKeyFrameInfo::GetTime(void) const
96 _VisualElementAnimationKeyFrameInfo::GetValue(void) const
102 _VisualElementAnimationKeyFrameInfo::GetValueEx(void) const
107 const IVisualElementAnimationTimingFunction*
108 _VisualElementAnimationKeyFrameInfo::GetTimingFunction(void) const
110 return __pTimingFunction;
113 _VisualElementAnimationKeyFrame::_VisualElementAnimationKeyFrame(void)
115 __keyFrameList.Construct();
118 _VisualElementAnimationKeyFrame::~_VisualElementAnimationKeyFrame(void)
120 __keyFrameList.RemoveAll(true);
124 _VisualElementAnimationKeyFrame::Equals(const Tizen::Base::Object& obj) const
126 const _VisualElementAnimationKeyFrame* pKeyFrame = dynamic_cast< const _VisualElementAnimationKeyFrame* >(&obj);
128 if (pKeyFrame == null)
133 return __keyFrameList.Equals(pKeyFrame->__keyFrameList);
136 _VisualElementAnimationKeyFrame*
137 _VisualElementAnimationKeyFrame::CloneN(void) const
140 int count = __keyFrameList.GetCount();
141 SysAssertf(count > 0, "The count of key frames is 0.");
143 _VisualElementAnimationKeyFrame* pCloned = new (std::nothrow) _VisualElementAnimationKeyFrame();
144 SysTryReturn(NID_UI_ANIM, pCloned, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
146 const _VisualElementAnimationKeyFrameInfo* pInfo = null;
148 for (i = 0; i < count; i++)
150 pInfo = static_cast< const _VisualElementAnimationKeyFrameInfo* >(__keyFrameList.GetAt(i));
151 SysAssertf(pInfo != null, "Key frame is null. index = %d", i);
153 if (pCloned->AddKeyFrame(pInfo->GetTime(), pInfo->GetValue(), pInfo->GetTimingFunction()) != E_SUCCESS)
164 _VisualElementAnimationKeyFrame::GetCount(void) const
166 return __keyFrameList.GetCount();
170 _VisualElementAnimationKeyFrame::AddKeyFrame(float time, const Variant& value, const IVisualElementAnimationTimingFunction* pTimingFunction)
172 _VisualElementAnimationKeyFrameInfo* pInfo = new (std::nothrow) _VisualElementAnimationKeyFrameInfo(time, value, pTimingFunction);
173 SysTryReturnResult(NID_UI_ANIM, pInfo, E_OUT_OF_MEMORY, "Memory allocation failed.");
175 int index = GetKeyFrameIndex(time);
179 __keyFrameList.SetAt(*pInfo, index, true);
183 __keyFrameList.Add(*pInfo);
186 _KeyFrameComparer comparer;
188 __keyFrameList.Sort(comparer);
194 _VisualElementAnimationKeyFrame::RemoveKeyFrame(float time)
196 int index = GetKeyFrameIndex(time);
197 SysTryReturnResult(NID_UI_ANIM, index >= 0, E_OBJ_NOT_FOUND, "Key frame is not found. time = %f", time);
199 return __keyFrameList.RemoveAt(index, true);
203 _VisualElementAnimationKeyFrame::RemoveAllKeyFrames(void)
205 __keyFrameList.RemoveAll(true);
208 _VisualElementAnimationKeyFrameInfo*
209 _VisualElementAnimationKeyFrame::GetKeyFrameInfoAt(int index) const
211 SysTryReturn(NID_UI_ANIM, index >= 0, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Key frame is not found. index = %d");
213 return static_cast< _VisualElementAnimationKeyFrameInfo* >(const_cast< Tizen::Base::Object* >(__keyFrameList.GetAt(index)));
217 _VisualElementAnimationKeyFrame::GetKeyFrameIndex(float time) const
223 count = __keyFrameList.GetCount();
225 const _VisualElementAnimationKeyFrameInfo* pInfo = null;
226 for (i = 0; i < count ; i++)
228 pInfo = static_cast< const _VisualElementAnimationKeyFrameInfo* >(__keyFrameList.GetAt(i));
229 SysAssertf(pInfo != null, "Key frame is null.");
231 if (_FloatCompare(time, pInfo->GetTime()))
241 }}} // Tizen::Ui::Animations