From 155486decf1e82a9bb8c2054eaf4b98be046715f Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Thu, 13 Feb 2025 12:01:54 +0900 Subject: [PATCH] [NUI] Support to view constructor which we can ignore Relayout Let we make view creation method that we can ignore DALi engine side Relayout feature. It will be useful when we can assume that - This view always be exist under Layout - ResizePolicy don't need - Relayout event not required - Internal visuals, or VisualObjects don't use FittingMode. - Text are not be used Relative dali patch : https://review.tizen.org/gerrit/c/platform/core/uifw/dali-csharp-binder/+/319564 Signed-off-by: Eunki, Hong --- .../src/internal/Interop/Interop.View.cs | 6 ++ .../src/public/BaseComponents/View.cs | 83 ++++++++++++++++--- 2 files changed, 78 insertions(+), 11 deletions(-) diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.View.cs b/src/Tizen.NUI/src/internal/Interop/Interop.View.cs index 37833458039..bd1ad85233d 100755 --- a/src/Tizen.NUI/src/internal/Interop/Interop.View.cs +++ b/src/Tizen.NUI/src/internal/Interop/Interop.View.cs @@ -29,6 +29,12 @@ internal static partial class View [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_View_NewCustom")] public static extern global::System.IntPtr NewCustom(); + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_View_NewWithBehaviour")] + public static extern global::System.IntPtr NewWithBehaviour(int behaviour); + + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_View_NewCustomWithBehaviour")] + public static extern global::System.IntPtr NewCustomWithBehaviour(int behaviour); + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_View")] public static extern void DeleteView(global::System.Runtime.InteropServices.HandleRef jarg1); diff --git a/src/Tizen.NUI/src/public/BaseComponents/View.cs b/src/Tizen.NUI/src/public/BaseComponents/View.cs index 430fb0a4332..ce9e7a4ec61 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/View.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/View.cs @@ -450,7 +450,7 @@ static View() /// Custom mode by default. /// [EditorBrowsable(EditorBrowsableState.Never)] - public enum ViewAccessibilityMode + internal enum ViewAccessibilityMode { /// /// Default accessibility implementation. Overriding View.Accessibility...() @@ -466,19 +466,69 @@ public enum ViewAccessibilityMode Custom, } - private static IntPtr NewWithAccessibilityMode(ViewAccessibilityMode accessibilityMode) + /// + /// ResizePolicy mode for controlling View's Relayout implementation. + /// It will be used when we can ensure that current view + /// will not use ResizePolicy and Relayout signal. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + internal enum ViewResizePolicyMode + { + /// + /// Default implementation. Will consider ResizePolicy and Relayout implementations + /// + [EditorBrowsable(EditorBrowsableState.Never)] + Default, + /// + /// Ignore ResizePolicy and relative functions. + /// + /// + /// It will be useful when we can assume that this View is... + /// - Always be existed under Layout. + /// - ResizePolicy don't need. + /// - Relayout event not used. + /// - Internal visuals and VisualObjects don't use FittingMode. + /// - Text don't need. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + Ignore, + } + + private static IntPtr NewWithAccessibilityModeAndResizePolicyMode(ViewAccessibilityMode accessibilityMode, ViewResizePolicyMode resizePolicyMode) { switch (accessibilityMode) { case ViewAccessibilityMode.Custom: + { + switch (resizePolicyMode) { - return Interop.View.NewCustom(); + case ViewResizePolicyMode.Ignore: + { + return Interop.View.NewCustomWithBehaviour(1); ///< Special enum to ignore size negotiate. + } + case ViewResizePolicyMode.Default: + default: + { + return Interop.View.NewCustom(); + } } + } case ViewAccessibilityMode.Default: default: + { + switch (resizePolicyMode) { - return Interop.View.New(); + case ViewResizePolicyMode.Ignore: + { + return Interop.View.NewWithBehaviour(1); ///< Special enum to ignore size negotiate. + } + case ViewResizePolicyMode.Default: + default: + { + return Interop.View.New(); + } } + } } } @@ -491,16 +541,11 @@ public View() : this(ViewAccessibilityMode.Default) { } - [EditorBrowsable(EditorBrowsableState.Never)] - public View(ViewAccessibilityMode accessibilityMode) : this(NewWithAccessibilityMode(accessibilityMode), true) - { - if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); - } - /// This will be public opened after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI). [EditorBrowsable(EditorBrowsableState.Never)] public View(ViewStyle viewStyle) : this(Interop.View.New(), true, viewStyle) { + NDalicPINVOKE.ThrowExceptionIfExists(); } /// @@ -511,10 +556,26 @@ public View(ViewStyle viewStyle) : this(Interop.View.New(), true, viewStyle) [EditorBrowsable(EditorBrowsableState.Never)] public View(bool shown) : this(Interop.View.New(), true) { - if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + NDalicPINVOKE.ThrowExceptionIfExists(); SetVisible(shown); } + [EditorBrowsable(EditorBrowsableState.Never)] + internal View(ViewAccessibilityMode accessibilityMode) : this(accessibilityMode, ViewResizePolicyMode.Default) + { + } + + [EditorBrowsable(EditorBrowsableState.Never)] + internal View(ViewResizePolicyMode resizePolicyMode) : this(ViewAccessibilityMode.Default, resizePolicyMode) + { + } + + [EditorBrowsable(EditorBrowsableState.Never)] + internal View(ViewAccessibilityMode accessibilityMode, ViewResizePolicyMode resizePolicyMode) : this(NewWithAccessibilityModeAndResizePolicyMode(accessibilityMode, resizePolicyMode), true) + { + NDalicPINVOKE.ThrowExceptionIfExists(); + } + internal View(global::System.IntPtr cPtr, bool cMemoryOwn, ViewStyle viewStyle, bool shown = true) : this(cPtr, cMemoryOwn, shown) { InitializeStyle(viewStyle);