From fab5313b860f16b203ebf57863e7361e75bdda2b Mon Sep 17 00:00:00 2001 From: seungho Date: Tue, 26 Oct 2021 16:47:46 +0900 Subject: [PATCH] [NUI] Add Transition Group Signed-off-by: seungho --- .../src/internal/Transition/FadeTransitionItem.cs | 4 +- .../src/internal/Transition/ScaleTransitionItem.cs | 8 +- .../src/internal/Transition/SlideTransitionItem.cs | 4 +- .../src/internal/Transition/TransitionGroupItem.cs | 110 +++++++++++++++++++++ .../src/internal/Transition/TransitionItemBase.cs | 13 ++- .../src/internal/Transition/TransitionSet.cs | 15 ++- .../src/public/Transition/FadeTransition.cs | 4 +- .../src/public/Transition/ScaleTransition.cs | 4 +- .../src/public/Transition/SlideTransition.cs | 4 +- .../src/public/Transition/TransitionBase.cs | 9 +- .../src/public/Transition/TransitionGroup.cs | 66 +++++++++++++ .../Samples/PageTransitionSample.cs | 53 +++++++--- 12 files changed, 262 insertions(+), 32 deletions(-) create mode 100644 src/Tizen.NUI/src/internal/Transition/TransitionGroupItem.cs create mode 100644 src/Tizen.NUI/src/public/Transition/TransitionGroup.cs diff --git a/src/Tizen.NUI/src/internal/Transition/FadeTransitionItem.cs b/src/Tizen.NUI/src/internal/Transition/FadeTransitionItem.cs index 62248c1..1758eb7 100644 --- a/src/Tizen.NUI/src/internal/Transition/FadeTransitionItem.cs +++ b/src/Tizen.NUI/src/internal/Transition/FadeTransitionItem.cs @@ -31,10 +31,10 @@ namespace Tizen.NUI /// Creates an initialized fade.
/// /// DurationmSeconds must be greater than zero. - 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; } diff --git a/src/Tizen.NUI/src/internal/Transition/ScaleTransitionItem.cs b/src/Tizen.NUI/src/internal/Transition/ScaleTransitionItem.cs index 2077796..fc1c559 100755 --- a/src/Tizen.NUI/src/internal/Transition/ScaleTransitionItem.cs +++ b/src/Tizen.NUI/src/internal/Transition/ScaleTransitionItem.cs @@ -31,10 +31,10 @@ namespace Tizen.NUI /// Creates an initialized ScaleTransition.
/// /// Delay and duration of timePeriod must be greater than zero. - 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.
/// /// Delay and duration of timePeriod must be greater than zero. - 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; } diff --git a/src/Tizen.NUI/src/internal/Transition/SlideTransitionItem.cs b/src/Tizen.NUI/src/internal/Transition/SlideTransitionItem.cs index 92246c4..4db544e 100755 --- a/src/Tizen.NUI/src/internal/Transition/SlideTransitionItem.cs +++ b/src/Tizen.NUI/src/internal/Transition/SlideTransitionItem.cs @@ -31,10 +31,10 @@ namespace Tizen.NUI /// Creates an initialized SlideTransition.
/// /// Delay and duration of timePeriod must be greater than zero. - 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 index 0000000..4d8f5ed --- /dev/null +++ b/src/Tizen.NUI/src/internal/Transition/TransitionGroupItem.cs @@ -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 +{ + /// + /// 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. + /// + internal class TransitionGroupItem : TransitionItemBase + { + private List transitionItemList = null; + + private bool useGroupTimePeriod = false; + private bool stepTransition = false; + private bool useGroupAlphaFunction = false; + + private View transitionView = null; + + /// + /// Creates an initialized fade.
+ ///
+ /// DurationmSeconds must be greater than zero. + public TransitionGroupItem(View view, List 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(); + 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; + } + } + + /// + /// Gets or sets whether the View moves with child or not. + /// + 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; + } + } +} diff --git a/src/Tizen.NUI/src/internal/Transition/TransitionItemBase.cs b/src/Tizen.NUI/src/internal/Transition/TransitionItemBase.cs index 171bf44..1ad7cb3 100755 --- a/src/Tizen.NUI/src/internal/Transition/TransitionItemBase.cs +++ b/src/Tizen.NUI/src/internal/Transition/TransitionItemBase.cs @@ -23,14 +23,16 @@ namespace Tizen.NUI { internal class TransitionItemBase : BaseHandle { + private bool appearingTransition = true; + /// /// Creates an initialized TransitionItemBase.
///
- 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 /// /// Gets or sets whether the View moves with child or not. /// - 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; + } } /// diff --git a/src/Tizen.NUI/src/internal/Transition/TransitionSet.cs b/src/Tizen.NUI/src/internal/Transition/TransitionSet.cs index 1663a5a..241e9d1 100755 --- a/src/Tizen.NUI/src/internal/Transition/TransitionSet.cs +++ b/src/Tizen.NUI/src/internal/Transition/TransitionSet.cs @@ -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) diff --git a/src/Tizen.NUI/src/public/Transition/FadeTransition.cs b/src/Tizen.NUI/src/public/Transition/FadeTransition.cs index 5df03e6..b307e4a 100644 --- a/src/Tizen.NUI/src/public/Transition/FadeTransition.cs +++ b/src/Tizen.NUI/src/public/Transition/FadeTransition.cs @@ -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; } } diff --git a/src/Tizen.NUI/src/public/Transition/ScaleTransition.cs b/src/Tizen.NUI/src/public/Transition/ScaleTransition.cs index 71668b9..6c44f0b 100644 --- a/src/Tizen.NUI/src/public/Transition/ScaleTransition.cs +++ b/src/Tizen.NUI/src/public/Transition/ScaleTransition.cs @@ -49,9 +49,9 @@ namespace Tizen.NUI /// 9 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; } } diff --git a/src/Tizen.NUI/src/public/Transition/SlideTransition.cs b/src/Tizen.NUI/src/public/Transition/SlideTransition.cs index 05d17d3..84b09f4 100644 --- a/src/Tizen.NUI/src/public/Transition/SlideTransition.cs +++ b/src/Tizen.NUI/src/public/Transition/SlideTransition.cs @@ -44,9 +44,9 @@ namespace Tizen.NUI /// 9 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; } } diff --git a/src/Tizen.NUI/src/public/Transition/TransitionBase.cs b/src/Tizen.NUI/src/public/Transition/TransitionBase.cs index 200dd66..de7c251 100644 --- a/src/Tizen.NUI/src/public/Transition/TransitionBase.cs +++ b/src/Tizen.NUI/src/public/Transition/TransitionBase.cs @@ -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 index 0000000..ddf975c --- /dev/null +++ b/src/Tizen.NUI/src/public/Transition/TransitionGroup.cs @@ -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 +{ + /// + /// FadeTransition class is a cluster of properties for the fade transition of a View. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public class TransitionGroup : TransitionBase + { + private List transitionList = null; + + /// + /// Create a FadeTransition for the View pair. + /// + [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(); + } + 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; + } + } +} diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/PageTransitionSample.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/PageTransitionSample.cs index 2c7c215..54582d4 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/PageTransitionSample.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/PageTransitionSample.cs @@ -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), -- 2.7.4