Skip to content

Commit

Permalink
[NUI] Support to view constructor which we can ignore Relayout
Browse files Browse the repository at this point in the history
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 <eunkiki.hong@samsung.com>
  • Loading branch information
Eunki, Hong committed Feb 13, 2025
1 parent af9b979 commit 5fe20f9
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 6 deletions.
6 changes: 6 additions & 0 deletions src/Tizen.NUI/src/internal/Interop/Interop.View.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
73 changes: 67 additions & 6 deletions src/Tizen.NUI/src/public/BaseComponents/View.cs
Original file line number Diff line number Diff line change
Expand Up @@ -466,19 +466,69 @@ public enum ViewAccessibilityMode
Custom,
}

private static IntPtr NewWithAccessibilityMode(ViewAccessibilityMode accessibilityMode)
/// <summary>
/// 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.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public enum ViewResizePolicyMode
{
/// <summary>
/// Default implementation. Will consider ResizePolicy and Relayout implementations
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
Default,
/// <summary>
/// Ignore ResizePolicy and relative functions.
/// </summary>
/// <remarks>
/// 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
/// </remarks>
[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();
}
}
}
}
}

Expand All @@ -492,15 +542,26 @@ public View() : this(ViewAccessibilityMode.Default)
}

[EditorBrowsable(EditorBrowsableState.Never)]
public View(ViewAccessibilityMode accessibilityMode) : this(NewWithAccessibilityMode(accessibilityMode), true)
public View(ViewAccessibilityMode accessibilityMode) : this(accessibilityMode, ResizePolicyMode.Default)
{
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}

[EditorBrowsable(EditorBrowsableState.Never)]
public View(ViewResizePolicyMode resizePolicyMode) : this(ViewAccessibilityMode.Default, resizePolicyMode)
{
}

[EditorBrowsable(EditorBrowsableState.Never)]
public View(ViewAccessibilityMode accessibilityMode, ViewResizePolicyMode resizePolicyMode) : this(NewWithAccessibilityModeAndResizePolicyMode(accessibilityMode, resizePolicyMode), true)
{
NDalicPINVOKE.ThrowExceptionIfExists();
}

/// 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();
}

/// <summary>
Expand All @@ -511,7 +572,7 @@ 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);
}

Expand Down

0 comments on commit 5fe20f9

Please sign in to comment.