[NUI] Add Transition Group
authorseungho <sbsh.baek@samsung.com>
Tue, 26 Oct 2021 07:47:46 +0000 (16:47 +0900)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Tue, 9 Nov 2021 05:57:53 +0000 (14:57 +0900)
Signed-off-by: seungho <sbsh.baek@samsung.com>
12 files changed:
src/Tizen.NUI/src/internal/Transition/FadeTransitionItem.cs
src/Tizen.NUI/src/internal/Transition/ScaleTransitionItem.cs
src/Tizen.NUI/src/internal/Transition/SlideTransitionItem.cs
src/Tizen.NUI/src/internal/Transition/TransitionGroupItem.cs [new file with mode: 0644]
src/Tizen.NUI/src/internal/Transition/TransitionItemBase.cs
src/Tizen.NUI/src/internal/Transition/TransitionSet.cs
src/Tizen.NUI/src/public/Transition/FadeTransition.cs
src/Tizen.NUI/src/public/Transition/ScaleTransition.cs
src/Tizen.NUI/src/public/Transition/SlideTransition.cs
src/Tizen.NUI/src/public/Transition/TransitionBase.cs
src/Tizen.NUI/src/public/Transition/TransitionGroup.cs [new file with mode: 0644]
test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/PageTransitionSample.cs

index 62248c1..1758eb7 100644 (file)
@@ -31,10 +31,10 @@ namespace Tizen.NUI
         /// Creates an initialized fade.<br />
         /// </summary>
         /// <remarks>DurationmSeconds must be greater than zero.</remarks>
-        public FadeTransitionItem(View view, float opacity, bool isAppearing, TimePeriod timePeriod, AlphaFunction alphaFunction) : this(Interop.FadeTransitionItem.New(view.SwigCPtr, opacity, timePeriod.SwigCPtr), true)
+        public FadeTransitionItem(View view, float opacity, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction) : this(Interop.FadeTransitionItem.New(view.SwigCPtr, opacity, timePeriod.SwigCPtr), true)
         {
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            AppearingTransition = isAppearing;
+            AppearingTransition = appearingTransition;
             AlphaFunction = alphaFunction;
         }
 
index 2077796..fc1c559 100755 (executable)
@@ -31,10 +31,10 @@ namespace Tizen.NUI
         /// Creates an initialized ScaleTransition.<br />
         /// </summary>
         /// <remarks>Delay and duration of timePeriod must be greater than zero.</remarks>
-        public ScaleTransitionItem(View view, float scale, bool isAppearing, TimePeriod timePeriod, AlphaFunction alphaFunction) : this(Interop.ScaleTransitionItem.New(view.SwigCPtr, scale, timePeriod.SwigCPtr), true)
+        public ScaleTransitionItem(View view, float scale, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction) : this(Interop.ScaleTransitionItem.New(view.SwigCPtr, scale, timePeriod.SwigCPtr), true)
         {
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            AppearingTransition = isAppearing;
+            AppearingTransition = appearingTransition;
             AlphaFunction = alphaFunction;
         }
 
@@ -42,10 +42,10 @@ namespace Tizen.NUI
         /// Creates an initialized ScaleTransition.<br />
         /// </summary>
         /// <remarks>Delay and duration of timePeriod must be greater than zero.</remarks>
-        public ScaleTransitionItem(View view, Vector2 scale, bool isAppearing, TimePeriod timePeriod, AlphaFunction alphaFunction) : this(Interop.ScaleTransitionItem.New(view.SwigCPtr, scale.SwigCPtr, timePeriod.SwigCPtr), true)
+        public ScaleTransitionItem(View view, Vector2 scale, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction) : this(Interop.ScaleTransitionItem.New(view.SwigCPtr, scale.SwigCPtr, timePeriod.SwigCPtr), true)
         {
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            AppearingTransition = isAppearing;
+            AppearingTransition = appearingTransition;
             AlphaFunction = alphaFunction;
         }
 
index 92246c4..4db544e 100755 (executable)
@@ -31,10 +31,10 @@ namespace Tizen.NUI
         /// Creates an initialized SlideTransition.<br />
         /// </summary>
         /// <remarks>Delay and duration of timePeriod must be greater than zero.</remarks>
-        public SlideTransitionItem(View view, Vector2 direction, bool isAppearing, TimePeriod timePeriod, AlphaFunction alphaFunction) : this(Interop.SlideTransitionItem.New(view.SwigCPtr, direction.SwigCPtr, timePeriod.SwigCPtr), true)
+        public SlideTransitionItem(View view, Vector2 direction, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction) : this(Interop.SlideTransitionItem.New(view.SwigCPtr, direction.SwigCPtr, timePeriod.SwigCPtr), true)
         {
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            AppearingTransition = isAppearing;
+            AppearingTransition = appearingTransition;
             AlphaFunction = alphaFunction;
         }
 
diff --git a/src/Tizen.NUI/src/internal/Transition/TransitionGroupItem.cs b/src/Tizen.NUI/src/internal/Transition/TransitionGroupItem.cs
new file mode 100644 (file)
index 0000000..4d8f5ed
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright(c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.ComponentModel;
+using Tizen.NUI.BaseComponents;
+using System.Collections.Generic;
+
+namespace Tizen.NUI
+{
+    /// <summary>
+    /// TransitionGroupItem is an object to set Fade transition of a View that will appear or disappear.
+    /// TransitionGroupItem object is required to be added to the TransitionSet to play.
+    /// </summary>
+    internal class TransitionGroupItem : TransitionItemBase
+    {
+        private List<TransitionItemBase> transitionItemList = null;
+
+        private bool useGroupTimePeriod = false;
+        private bool stepTransition = false;
+        private bool useGroupAlphaFunction = false;
+
+        private View transitionView = null;
+
+        /// <summary>
+        /// Creates an initialized fade.<br />
+        /// </summary>
+        /// <remarks>DurationmSeconds must be greater than zero.</remarks>
+        public TransitionGroupItem(View view, List<TransitionBase> transitionList, bool useGroupTimePeriod, bool stepTransition, bool useGroupAlphaFunction, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction)
+        : base(view, appearingTransition, timePeriod, alphaFunction)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+
+            this.useGroupTimePeriod = useGroupTimePeriod;
+            this.stepTransition = stepTransition;
+            this.useGroupAlphaFunction = useGroupAlphaFunction;
+            transitionView = view;
+
+            transitionItemList = new List<TransitionItemBase>();
+            for (int index = 0; index < transitionList.Count; ++index)
+            {
+                TimePeriod localTimePeriod = new TimePeriod(transitionList[index].GetTimePeriod().DelayMilliseconds, transitionList[index].GetTimePeriod().DurationMilliseconds);
+                AlphaFunction localAlphaFunction = transitionList[index].GetAlphaFunction();
+                if (useGroupTimePeriod)
+                {
+                    int stepMilliseconds = 0;
+                    if (stepTransition)
+                    {
+                        stepMilliseconds = TimePeriod.DurationMilliseconds / transitionList.Count;
+                    }
+                    localTimePeriod.DelayMilliseconds += TimePeriod.DelayMilliseconds + stepMilliseconds * index;
+                }
+                if (useGroupAlphaFunction)
+                {
+                    localAlphaFunction = AlphaFunction;
+                }
+                transitionItemList.Add(transitionList[index].CreateTransition(transitionView, AppearingTransition, localTimePeriod, localAlphaFunction));
+            }
+        }
+
+        public int TransitionCount
+        {
+            get
+            {
+                if(transitionItemList != null)
+                {
+                    return transitionItemList.Count;
+                }
+                return 0;
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets whether the View moves with child or not.
+        /// </summary>
+        public override bool TransitionWithChild
+        {
+            set
+            {
+                foreach (TransitionItemBase item in transitionItemList)
+                {
+                    item.TransitionWithChild = value;
+                }
+            }
+        }
+
+        public TransitionItemBase GetTransitionAt(int index)
+        {
+            if (transitionItemList != null && index < transitionItemList.Count)
+            {
+                return transitionItemList[index];
+            }
+            return null;
+        }
+    }
+}
index 171bf44..1ad7cb3 100755 (executable)
@@ -23,14 +23,16 @@ namespace Tizen.NUI
 {
     internal class TransitionItemBase : BaseHandle
     {
+        private bool appearingTransition = true;
+
         /// <summary>
         /// Creates an initialized TransitionItemBase.<br />
         /// </summary>
-        public TransitionItemBase(View target, bool isAppearing, TimePeriod timePeriod, AlphaFunction alphaFunction) : this(Interop.TransitionItemBase.New(), true)
+        public TransitionItemBase(View target, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction) : this(Interop.TransitionItemBase.New(), true)
         {
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
             
-            AppearingTransition = isAppearing;
+            AppearingTransition = appearingTransition;
             TimePeriod = timePeriod;
             AlphaFunction = alphaFunction;
         }
@@ -78,7 +80,7 @@ namespace Tizen.NUI
         /// <summary>
         /// Gets or sets whether the View moves with child or not.
         /// </summary>
-        public bool TransitionWithChild
+        public virtual bool TransitionWithChild
         {
             set
             {
@@ -94,9 +96,14 @@ namespace Tizen.NUI
         {
             set
             {
+                appearingTransition = value;
                 Interop.TransitionItemBase.SetAppearingTransition(SwigCPtr, value);
                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
             }
+            get
+            {
+                return appearingTransition;
+            }
         }
 
         /// <summary>
index 1663a5a..241e9d1 100755 (executable)
@@ -101,8 +101,19 @@ namespace Tizen.NUI
 
         public void AddTransition(TransitionItemBase transition)
         {
-            Interop.TransitionSet.AddTransition(SwigCPtr, transition.SwigCPtr);
-            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            if (transition is TransitionGroupItem)
+            {
+                TransitionGroupItem transitionGroup = transition as TransitionGroupItem;
+                for (int index = 0; index < transitionGroup.TransitionCount; ++index)
+                {
+                    this.AddTransition(transitionGroup.GetTransitionAt(index));
+                }
+            }
+            else
+            {
+                Interop.TransitionSet.AddTransition(SwigCPtr, transition.SwigCPtr);
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
         }
 
         public TransitionItemBase GetTransitionAt(uint index)
index 5df03e6..b307e4a 100644 (file)
@@ -56,9 +56,9 @@ namespace Tizen.NUI
             }
         }
 
-        internal override TransitionItemBase CreateTransition(View view, bool isAppearing)
+        internal override TransitionItemBase CreateTransition(View view, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction)
         {
-            FadeTransitionItem fade = new FadeTransitionItem(view, Opacity, isAppearing, GetTimePeriod(), GetAlphaFunction());
+            FadeTransitionItem fade = new FadeTransitionItem(view, Opacity, appearingTransition, timePeriod, alphaFunction);
             return fade;
         }
     }
index 71668b9..6c44f0b 100644 (file)
@@ -49,9 +49,9 @@ namespace Tizen.NUI
         /// <since_tizen> 9 </since_tizen>
         public Vector2 ScaleFactor { get; set; } = new Vector2(0.0f, 0.0f);
 
-        internal override TransitionItemBase CreateTransition(View view, bool isAppearing)
+        internal override TransitionItemBase CreateTransition(View view, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction)
         {
-            ScaleTransitionItem scale = new ScaleTransitionItem(view, ScaleFactor, isAppearing, GetTimePeriod(), GetAlphaFunction());
+            ScaleTransitionItem scale = new ScaleTransitionItem(view, ScaleFactor, appearingTransition, timePeriod, alphaFunction);
             return scale;
         }
     }
index 05d17d3..84b09f4 100644 (file)
@@ -44,9 +44,9 @@ namespace Tizen.NUI
         /// <since_tizen> 9 </since_tizen>
         public Vector2 Direction { get; set; } = SlideTransitionDirection.Right;
 
-        internal override TransitionItemBase CreateTransition(View view, bool isAppearing)
+        internal override TransitionItemBase CreateTransition(View view, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction)
         {
-            SlideTransitionItem slide = new SlideTransitionItem(view, Direction, isAppearing, GetTimePeriod(), GetAlphaFunction());
+            SlideTransitionItem slide = new SlideTransitionItem(view, Direction, appearingTransition, timePeriod, alphaFunction);
             return slide;
         }
     }
index 200dd66..de7c251 100644 (file)
@@ -84,9 +84,14 @@ namespace Tizen.NUI
             return alphaFunction ??= new AlphaFunction(AlphaFunction.BuiltinFunctions.Default);
         }
 
-        internal virtual TransitionItemBase CreateTransition(View view, bool isAppearing)
+        internal TransitionItemBase CreateTransition(View view, bool appearingTransition)
         {
-            return new TransitionItemBase(view, isAppearing, GetTimePeriod(), GetAlphaFunction());
+            return CreateTransition(view, appearingTransition, GetTimePeriod(), GetAlphaFunction());
+        }
+
+        internal virtual TransitionItemBase CreateTransition(View view, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction)
+        {
+            return new TransitionItemBase(view, appearingTransition, timePeriod, alphaFunction);
         }
 
         [EditorBrowsable(EditorBrowsableState.Never)]
diff --git a/src/Tizen.NUI/src/public/Transition/TransitionGroup.cs b/src/Tizen.NUI/src/public/Transition/TransitionGroup.cs
new file mode 100644 (file)
index 0000000..ddf975c
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright(c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.ComponentModel;
+using Tizen.NUI.BaseComponents;
+using System.Collections.Generic;
+
+namespace Tizen.NUI
+{
+    /// <summary>
+    /// FadeTransition class is a cluster of properties for the fade transition of a View.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class TransitionGroup : TransitionBase
+    {
+        private List<TransitionBase> transitionList = null;
+
+        /// <summary>
+        /// Create a FadeTransition for the View pair.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public TransitionGroup()
+        {
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool UseGroupTimePeriod { set; get; } = false;
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool StepTransition { set; get; } = false;
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool UseGroupAlphaFunction { set; get; } = false;
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void AddTransition(TransitionBase transition)
+        {
+            if (transitionList == null)
+            {
+                transitionList = new List<TransitionBase>();
+            }
+            transitionList.Add(transition);
+        }
+
+        internal override TransitionItemBase CreateTransition(View view, bool appearingTransition, TimePeriod timePeriod, AlphaFunction alphaFunction)
+        {
+            TransitionGroupItem group = new TransitionGroupItem(view, transitionList, UseGroupTimePeriod, StepTransition, UseGroupAlphaFunction, appearingTransition, timePeriod, alphaFunction);
+            return group;
+        }
+    }
+}
index 2c7c215..54582d4 100755 (executable)
@@ -82,6 +82,37 @@ namespace Tizen.NUI.Samples
             layoutView.Add(greenButton);
             layoutView.Add(blueButton);
 
+
+            TransitionGroup transitionGroup = new TransitionGroup()
+            {
+                UseGroupTimePeriod = true,
+                UseGroupAlphaFunction = true,
+                StepTransition = true,
+                TimePeriod = new TimePeriod(500, 3000),
+                AlphaFunction = new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseInOut),
+            };
+            SlideTransition slide = new SlideTransition()
+            {
+                TimePeriod = new TimePeriod(1000),
+                AlphaFunction = new AlphaFunction(AlphaFunction.BuiltinFunctions.Default),
+                Direction = SlideTransitionDirection.Top
+            };
+            transitionGroup.AddTransition(slide);
+            FadeTransition fade = new FadeTransition()
+            {
+                Opacity = 0.3f,
+                TimePeriod = new TimePeriod(1000),
+                AlphaFunction = new AlphaFunction(AlphaFunction.BuiltinFunctions.Default)
+            };
+            transitionGroup.AddTransition(fade);
+            ScaleTransition scale = new ScaleTransition()
+            {
+                ScaleFactor = new Vector2(0.3f, 0.3f),
+                TimePeriod = new TimePeriod(1000),
+                AlphaFunction = new AlphaFunction(AlphaFunction.BuiltinFunctions.Default)
+            };
+            transitionGroup.AddTransition(scale);
+
             mainPage = new ContentPage()
             {
                 BackgroundColor = Color.Transparent,
@@ -92,12 +123,7 @@ namespace Tizen.NUI.Samples
                     AlphaFunction = new AlphaFunction(AlphaFunction.BuiltinFunctions.Default),
                     ScaleFactor = new Vector2(0.5f, 1.5f)
                 },
-                AppearingTransition = new SlideTransition()
-                {
-                    TimePeriod = new TimePeriod(500),
-                    AlphaFunction = new AlphaFunction(AlphaFunction.BuiltinFunctions.Default),
-                    Direction = SlideTransitionDirection.Top
-                },
+                AppearingTransition = transitionGroup,
             };
             navigator.Push(mainPage);
 
@@ -328,15 +354,20 @@ namespace Tizen.NUI.Samples
             };
             pageRoot.Add(pageBackground);
 
+            TransitionGroup transitionGroup = new TransitionGroup();
+            FadeTransition slide = new FadeTransition()
+            {
+                TimePeriod = new TimePeriod(500),
+                AlphaFunction = new AlphaFunction(AlphaFunction.BuiltinFunctions.Default),
+            };
+            transitionGroup.AddTransition(slide);
+
             Page page = new ContentPage()
             {
                 BackgroundColor = Color.Transparent,
                 Content = pageRoot,
-                AppearingTransition = new FadeTransition()
-                {
-                    TimePeriod = new TimePeriod(500),
-                    AlphaFunction = new AlphaFunction(AlphaFunction.BuiltinFunctions.Default),
-                },
+
+                AppearingTransition = transitionGroup,
                 DisappearingTransition = new SlideTransition()
                 {
                     TimePeriod = new TimePeriod(500),