refactor: move opacity effect to ViewStack 79/244679/1
authorLukasz Stanislawski <lukasz.stanislawski@gmail.com>
Wed, 23 Sep 2020 06:46:09 +0000 (08:46 +0200)
committerLukasz Stanislawski <lukasz.stanislawski@gmail.com>
Wed, 23 Sep 2020 06:59:49 +0000 (08:59 +0200)
previously dim effect was handled in MainView, now all effects
- transitions, dim are handled in singe place.

Change-Id: I2c790111fe0e0aec334f2ea466d88000b2cb84f8

Oobe/Oobe/Controls/ViewStack.cs
Oobe/Oobe/Views/MainView.cs

index d7eda33fb11eedb14e37c534d8c5ba1075f17e40..b64e709a8887cf021373f960dfb1cb1419641055 100644 (file)
@@ -33,6 +33,7 @@ namespace Oobe.Controls
 
         private Animation pageEnterAnimation;
         private Animation pageLeaveAnimation;
+        private Animation opacityEffectAnimation;
 
         public ViewStack()
             : base()
@@ -40,6 +41,7 @@ namespace Oobe.Controls
             ClippingMode = ClippingModeType.ClipToBoundingBox;
             pageEnterAnimation = new Animation();
             pageLeaveAnimation = new Animation();
+            opacityEffectAnimation = new Animation();
             pageEnterAnimation.Finished += OnPageEntered;
             pageLeaveAnimation.Finished += OnPageLeave;
         }
@@ -99,6 +101,7 @@ namespace Oobe.Controls
                 FinishAnimations();
                 RemoveAllDelayedViews();
                 StartPageLeaveAnimation(Previous, Current);
+                StartShowAnimation(Previous);
                 AddViewToDelayRemove(Current);
                 views.Remove(Current);
             }
@@ -114,6 +117,7 @@ namespace Oobe.Controls
             Add(view);
             views.Add(view);
             StartPageEnterAnimation(Previous, Current);
+            StartHideAnimation(Previous);
         }
 
         protected override void Dispose(Tizen.NUI.DisposeTypes type)
@@ -170,6 +174,7 @@ namespace Oobe.Controls
         {
             FinishAnimation(pageLeaveAnimation);
             FinishAnimation(pageEnterAnimation);
+            FinishAnimation(opacityEffectAnimation);
         }
 
         private void StartPageLeaveAnimation(View back, View front)
@@ -230,6 +235,27 @@ namespace Oobe.Controls
             TransitionFinished?.Invoke(this, new EventArgs());
         }
 
+        private void StartHideAnimation(View view)
+        {
+            StartOpacityAnimation(view, 1.0f, 0.0f);
+        }
+
+        private void StartShowAnimation(View view)
+        {
+            StartOpacityAnimation(view, 0.0f, 1.0f);
+        }
+
+        private void StartOpacityAnimation(View view, float from, float to)
+        {
+            if (view != null)
+            {
+                opacityEffectAnimation.Duration = ScrollDuration;
+                view.Opacity = from;
+                opacityEffectAnimation.AnimateTo(view, "Opacity", to);
+                opacityEffectAnimation.Play();
+            }
+        }
+
         private class ViewStackBaseCustomLayout : LayoutGroup
         {
             protected override void OnMeasure(MeasureSpecification widthMeasureSpec, MeasureSpecification heightMeasureSpec)
index faf13a068841f2abb43def2ed7ce1e8a3e47edec..7e7441bc3363d9f134918e5f2f63a76eb997cbf0 100644 (file)
@@ -30,7 +30,6 @@ namespace Oobe.Views
         private const int TransitionTime = 750;
         private readonly Extents stackMargin = new Extents(48, 48, 48, 48);
         private ViewStack stack;
-        private Animation dimEffectAnimation;
         private Pagination pagination;
 
         public MainView(Window win)
@@ -62,8 +61,6 @@ namespace Oobe.Views
                 ClippingMode = ClippingModeType.Disabled,
             };
 
-            dimEffectAnimation = new Animation(TransitionTime);
-
             pagination = new Pagination();
             pagination.PositionUsesPivotPoint = true;
             pagination.PivotPoint = new Position(0.5f, 1.0f);
@@ -106,61 +103,23 @@ namespace Oobe.Views
 
         public void Push(View view)
         {
-            FinishDimAnimation();
-
             view.HeightResizePolicy = ResizePolicyType.FillToParent;
             view.WidthResizePolicy = ResizePolicyType.FillToParent;
 
-            if (stack.Current is View overlayedView)
-            {
-                StartDimAnimation(overlayedView);
-            }
-
             pagination.SelectedIndex = pagination.SelectedIndex + 1;
             stack.Push(view);
         }
 
         public void Pop()
         {
-            FinishDimAnimation();
-            if (stack.Previous is View previous)
-            {
-                StartUndimAnimation(previous);
-            }
-
             pagination.SelectedIndex = pagination.SelectedIndex - 1;
             stack.Pop();
         }
 
         public void Dispose()
         {
-            dimEffectAnimation.Dispose();
             stack.Dispose();
             pagination.Dispose();
         }
-
-        private void StartDimAnimation(View view)
-        {
-            view.Opacity = 1.0f;
-            dimEffectAnimation.AnimateTo(view, "Opacity", 0.0f);
-            dimEffectAnimation.Play();
-        }
-
-        private void StartUndimAnimation(View view)
-        {
-            view.Opacity = 0.0f;
-            dimEffectAnimation.AnimateTo(view, "Opacity", 1.0f);
-            dimEffectAnimation.Play();
-        }
-
-        private void FinishDimAnimation()
-        {
-            if (dimEffectAnimation.State == Animation.States.Playing)
-            {
-                dimEffectAnimation.Stop(Animation.EndActions.StopFinal);
-            }
-
-            dimEffectAnimation.Clear();
-        }
     }
 }