From da9ec169dab93abd132247eaad37eaf559e99edf Mon Sep 17 00:00:00 2001 From: huiyueun <35286162+huiyueun@users.noreply.github.com> Date: Wed, 10 Jan 2018 18:08:59 +0900 Subject: [PATCH] [NUI] Fix sibling issue (#20) Signed-off-by: huiyu,eun --- src/Tizen.NUI/src/public/BaseComponents/View.cs | 45 ++++++++++++++++++++++--- src/Tizen.NUI/src/public/Layer.cs | 32 ++++++++++++++++++ 2 files changed, 73 insertions(+), 4 deletions(-) diff --git a/src/Tizen.NUI/src/public/BaseComponents/View.cs b/src/Tizen.NUI/src/public/BaseComponents/View.cs index 78667e0..bd51f9b 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/View.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/View.cs @@ -2222,13 +2222,50 @@ namespace Tizen.NUI.BaseComponents { get { - int temp = 0; - GetProperty(View.Property.SIBLING_ORDER).Get(out temp); - return temp; + var parentChildren = Parent?.Children; + int currentOrder = 0; + if (parentChildren != null) + { + currentOrder = parentChildren.IndexOf(this); + + if (currentOrder < parentChildren.Count) + { + return currentOrder; + } + } + + return currentOrder; } set { - SetProperty(View.Property.SIBLING_ORDER, new Tizen.NUI.PropertyValue(value)); + var siblings = Parent?.Children; + if (siblings != null) + { + int currentOrder = siblings.IndexOf(this); + + if (value != currentOrder) + { + if (value == 0) + { + LowerToBottom(); + } + else if (value < siblings.Count - 1) + { + if (value > currentOrder) + { + RaiseAbove(siblings[value]); + } + else + { + LowerBelow(siblings[value]); + } + } + else + { + RaiseToTop(); + } + } + } } } diff --git a/src/Tizen.NUI/src/public/Layer.cs b/src/Tizen.NUI/src/public/Layer.cs index f4be7f4..3a4b84d 100755 --- a/src/Tizen.NUI/src/public/Layer.cs +++ b/src/Tizen.NUI/src/public/Layer.cs @@ -259,6 +259,8 @@ namespace Tizen.NUI parentChildren[currentIdx] = temp; } } + NDalicPINVOKE.Layer_Raise(swigCPtr); + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// @@ -282,16 +284,46 @@ namespace Tizen.NUI } } + NDalicPINVOKE.Layer_Lower(swigCPtr); + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal void RaiseAbove(Layer target) { + var parentChildren = Window.Instance.LayersChildren; + if (parentChildren != null) + { + int currentIndex = parentChildren.IndexOf(this); + int targetIndex = parentChildren.IndexOf(target); + + // If the currentIndex is less than the target index and the target has the same parent. + if (currentIndex < targetIndex) + { + parentChildren.Remove(this); + parentChildren.Insert(targetIndex, this); + } + } NDalicPINVOKE.Layer_RaiseAbove(swigCPtr, Layer.getCPtr(target)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal void LowerBelow(Layer target) { + var parentChildren = Window.Instance.LayersChildren; + + if (parentChildren != null) + { + int currentIndex = parentChildren.IndexOf(this); + int targetIndex = parentChildren.IndexOf(target); + + // If the currentIndex is not already the 0th index and the target has the same parent. + if ((currentIndex != 0) && (targetIndex != -1) && + (currentIndex > targetIndex)) + { + parentChildren.Remove(this); + parentChildren.Insert(targetIndex, this); + } + } NDalicPINVOKE.Layer_LowerBelow(swigCPtr, Layer.getCPtr(target)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } -- 2.7.4