Fix for issue N_SE-44748, N_SE-44784
authorKunal Sinha <kunal.sinha@samsung.com>
Wed, 10 Jul 2013 11:37:59 +0000 (17:07 +0530)
committerKunal Sinha <kunal.sinha@samsung.com>
Fri, 12 Jul 2013 06:55:04 +0000 (12:25 +0530)
Change-Id: I1b5acc8be7d26d4e7e77de113dadd8cd5b29a04d
Signed-off-by: Kunal Sinha <kunal.sinha@samsung.com>
src/ui/controls/FUiCtrl_TokenEditPresenter.cpp
src/ui/inc/FUiCtrl_TokenEditPresenter.h

index 15de9e7..43e6623 100644 (file)
@@ -30,6 +30,7 @@
 #include "FUi_CoordinateSystemUtils.h"
 #include "FUi_AccessibilityContainer.h"
 #include "FUi_AccessibilityElement.h"
+#include "FUiAnim_VisualElementImpl.h"
 
 using namespace Tizen::Base;
 using namespace Tizen::Base::Runtime;
@@ -951,7 +952,7 @@ _TokenEditPresenter::DrawToken(int count)
                pTokenElement->SetAnimationProvider(null);
                if (pToken->isImplicitAnimation)
                {
-                       VisualElementAnimation* pAnimation = CreateAnimationN(*pTokenElement, true);
+                       VisualElementAnimation* pAnimation = CreateAnimationN(*pTokenElement);
                        pTokenElement->AddAnimation(*pAnimation);
                        delete pAnimation;
                        pToken->isImplicitAnimation = false;
@@ -1775,7 +1776,7 @@ _TokenEditPresenter::GetLineSpacingF(void) const
 }
 
 VisualElementAnimation*
-_TokenEditPresenter::CreateAnimationN(VisualElement& source, bool create)
+_TokenEditPresenter::CreateAnimationN(VisualElement& source)
 {
        VisualElementAnimation* pAnimation = null;
        VisualElementAnimationGroup* pAnimationGroup = new (std::nothrow) VisualElementAnimationGroup();
@@ -1794,16 +1795,9 @@ _TokenEditPresenter::CreateAnimationN(VisualElement& source, bool create)
                SysTryReturn(NID_UI_CTRL, pOpacityAnimation, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
 
                pOpacityAnimation->SetPropertyName("opacity");
-               if (!create)
-               {
-                       pOpacityAnimation->SetStartValue(Variant(1.0f));
-                       pOpacityAnimation->SetEndValue(Variant(0.0f));
-               }
-               else
-               {
-                       pOpacityAnimation->SetStartValue(Variant(0.0f));
-                       pOpacityAnimation->SetEndValue(Variant(1.0f));
-               }
+
+               pOpacityAnimation->SetStartValue(Variant(0.0f));
+               pOpacityAnimation->SetEndValue(Variant(1.0f));
 
                pOpacityAnimation->SetDuration(ANIMATION_DURATION_OPACITY);
                pOpacityAnimation->SetTimingFunction(__pTimingFunction);
@@ -1820,17 +1814,8 @@ _TokenEditPresenter::CreateAnimationN(VisualElement& source, bool create)
                startValue.width = startValue.width * 0.9;
                startValue.height = startValue.height * 0.9;
 
-               if (!create)
-               {
-                       pBoundsAnimation->SetStartValue(Variant(source.GetBounds()));
-                       pBoundsAnimation->SetEndValue(Variant(startValue));
-                       pBoundsAnimation->SetVisualElementAnimationStatusEventListener(this);
-               }
-               else
-               {
-                       pBoundsAnimation->SetStartValue(Variant(startValue));
-                       pBoundsAnimation->SetEndValue(Variant(source.GetBounds()));
-               }
+               pBoundsAnimation->SetStartValue(Variant(startValue));
+               pBoundsAnimation->SetEndValue(Variant(source.GetBounds()));
 
                pBoundsAnimation->SetDuration(ANIMATION_DURATION_BOUNDS);
                pBoundsAnimation->SetTimingFunction(__pTimingFunction);
@@ -3304,6 +3289,7 @@ _TokenEditPresenter::OnSurroundingTextDeleted(int offset, int charCount)
 
                                _Token* pToken = null;
                                _VisualElement* pTokenVisualElement = null;
+
                                if (__animatingIndex == (GetTokenCount() - 1))
                                {
                                        pToken = static_cast< _Token* >(__pTokenList->GetAt(GetTokenCount() - 1));
@@ -3311,9 +3297,10 @@ _TokenEditPresenter::OnSurroundingTextDeleted(int offset, int charCount)
                                        {
                                                pTokenVisualElement = pToken->GetVisualElement();
                                                SysTryReturnVoidResult(NID_UI_CTRL, pTokenVisualElement != null, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get token visual element.");
-                                               pTokenVisualElement->RemoveAnimation(L"TokenAnimation");
+                                               pTokenVisualElement->RemoveAllAnimations();
                                        }
                                }
+
                                pToken = static_cast< _Token* >(__pTokenList->GetAt(GetTokenCount() - 1));
                                if (pToken)
                                {
@@ -3336,9 +3323,7 @@ _TokenEditPresenter::OnSurroundingTextDeleted(int offset, int charCount)
                                if (pTokenVisualElement && __animatingIndex >= 0)
                                {
                                        __isAnimationInProgress = true;
-                                       VisualElementAnimation* pAnimation = CreateAnimationN(*pTokenVisualElement, false);
-                                       pTokenVisualElement->AddAnimation(L"TokenAnimation", *pAnimation);
-                                       delete pAnimation;
+                                       PerformRemoveTokenAnimation(*pTokenVisualElement);
                                }
                        }
 
@@ -3695,6 +3680,31 @@ _TokenEditPresenter::OnVisualElementAnimationFinished(const Tizen::Ui::Animation
 }
 
 void
+_TokenEditPresenter::OnTickOccurred(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, const Tizen::Ui::Variant& currentValue)
+{
+       VisualElementValueAnimation* pAnimation = dynamic_cast< VisualElementValueAnimation* >(const_cast< VisualElementAnimation* >(&animation));
+       VisualElement* pPresentation = const_cast< VisualElement* >(target.AcquirePresentationInstance());
+
+       if (pPresentation && pAnimation)
+       {
+               float diffX = 0.0f;
+               float diffY = 0.0f;
+
+               diffX = pPresentation->GetBounds().x;
+               diffY = pPresentation->GetBounds().y;
+
+               Variant newBounds(FloatRectangle(diffX, diffY, currentValue.ToFloatRectangle().width, currentValue.ToFloatRectangle().height));
+               _VisualElementImpl::GetInstance(*pPresentation)->SetProperty(VePropBounds, newBounds);
+       }
+       else
+       {
+               SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Failed to get presentation instance of visual element.");
+       }
+
+       target.ReleasePresentationInstance();
+}
+
+void
 _TokenEditPresenter::OnTimerExpired(Timer& timer)
 {
        Timer* onTimer = &timer;
@@ -4623,4 +4633,51 @@ _TokenEditPresenter::PrepareFocusUiMode(void)
        return;
 }
 
+void
+_TokenEditPresenter::PerformRemoveTokenAnimation(VisualElement& source)
+{
+       if (__pTimingFunction == null)
+       {
+               __pTimingFunction = new (std::nothrow) SineTimingFunction();
+               SysTryReturnVoidResult(NID_UI_CTRL, __pTimingFunction, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+       }
+
+       AnimationTransaction::Begin();
+
+       VisualElementPropertyAnimation* pOpacityAnimation = new (std::nothrow) VisualElementPropertyAnimation();
+       SysTryReturnVoidResult(NID_UI_CTRL, pOpacityAnimation, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+
+       pOpacityAnimation->SetPropertyName("opacity");
+       pOpacityAnimation->SetStartValue(Variant(1.0f));
+       pOpacityAnimation->SetEndValue(Variant(0.0f));
+
+       pOpacityAnimation->SetDuration(ANIMATION_DURATION_OPACITY);
+       pOpacityAnimation->SetTimingFunction(__pTimingFunction);
+
+       source.AddAnimation("OpacityAnimation", *pOpacityAnimation);
+       delete pOpacityAnimation;
+
+       VisualElementValueAnimation* pBoundsAnimation = new (std::nothrow) VisualElementValueAnimation();               //deletion will happen in catch/ in Destroy animation
+       SysTryReturnVoidResult(NID_UI_CTRL, pBoundsAnimation, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+
+       pBoundsAnimation->SetTimingFunction(__pTimingFunction);
+       FloatRectangle startValue = source.GetBounds();
+       startValue.x = startValue.x + startValue.width * 0.05;
+       startValue.y = startValue.y + startValue.height * 0.05;
+       startValue.width = startValue.width * 0.9;
+       startValue.height = startValue.height * 0.9;
+
+       pBoundsAnimation->SetStartValue(Variant(source.GetBounds()));
+       pBoundsAnimation->SetEndValue(Variant(startValue));
+       pBoundsAnimation->SetVisualElementAnimationStatusEventListener(this);
+       pBoundsAnimation->SetVisualElementAnimationTickEventListener(this);
+       pBoundsAnimation->SetDuration(ANIMATION_DURATION_BOUNDS);
+       source.AddAnimation(L"BoundsAnimation", *pBoundsAnimation);
+       delete pBoundsAnimation;
+
+       AnimationTransaction::Commit();
+
+       return;
+}
+
 }}} //Tizen::Ui::Controls
index d83272e..8d5e8ea 100644 (file)
@@ -46,6 +46,7 @@ class _TokenEditPresenter
        : public Tizen::Ui::Controls::_EditPresenter
        , virtual public Tizen::Base::Runtime::IEventListener
        , public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener
+       , public Tizen::Ui::Animations::IVisualElementAnimationTickEventListener
 {
 public:
        _TokenEditPresenter(void);
@@ -118,7 +119,7 @@ public:
 
        float GetLineSpacingF() const;
 
-       Tizen::Ui::Animations::VisualElementAnimation* CreateAnimationN(Tizen::Ui::Animations::VisualElement& source, bool create);
+       Tizen::Ui::Animations::VisualElementAnimation* CreateAnimationN(Tizen::Ui::Animations::VisualElement& source);
 
        virtual bool IsGuideTextActivated(void) const;
        virtual void DrawText(void);
@@ -147,6 +148,8 @@ public:
        virtual void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
        virtual void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount){}
        virtual void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target){}
+       virtual void OnTickOccurred(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, const Tizen::Ui::Variant& currentValue);
+
        void OnBoundsChanged(void);
 
        virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
@@ -177,6 +180,7 @@ public:
        void SetDrawFocusState(bool focusState);
        int GetFocusedTokenIndex(void) const;
        void PrepareFocusUiMode(void);
+       void PerformRemoveTokenAnimation(Tizen::Ui::Animations::VisualElement& source);
 
 private:
        bool DrawToken(int count = -1);