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 18, 2025
1 parent b611e13 commit b4287b9
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 11 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
83 changes: 72 additions & 11 deletions src/Tizen.NUI/src/public/BaseComponents/View.cs
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@ static View()
/// Custom mode by default.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public enum ViewAccessibilityMode
internal enum ViewAccessibilityMode
{
/// <summary>
/// Default accessibility implementation. Overriding View.Accessibility...()
Expand All @@ -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)]
internal 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 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.
/// </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 @@ -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();
}

/// <summary>
Expand All @@ -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);
Expand Down

0 comments on commit b4287b9

Please sign in to comment.