rj-action-library/Runtime/UI/Styling/UIStylePropertyContainer.cs

115 lines
3.0 KiB
C#
Raw Normal View History

2024-08-09 13:52:49 +00:00
using Godot;
using Rokojori;
2024-09-14 06:41:52 +00:00
using System.Collections.Generic;
2024-08-09 13:52:49 +00:00
namespace Rokojori
{
public interface UIStylePropertyContainer
{
2024-08-11 17:38:06 +00:00
UIStyle GetUIStyleParent();
UIPosition GetUIPosition();
2024-09-14 06:41:52 +00:00
UILayout GetUILayout();
UILineWrap GetUILineWrap();
Vector2 GetUISize();
Font GetFont();
2024-09-14 06:41:52 +00:00
2025-06-19 17:22:25 +00:00
UINumber GetUIStyleNumberProperty( UIStyleNumberProperty property, string shaderPropertyName, UIStylePropertyContainer source );
void SetUIStyleNumberProperty( UIStyleNumberProperty property, UINumber number );
UIColor GetUIStyleColorProperty( UIStyleColorProperty property, string shaderPropertyName, UIStylePropertyContainer source );
2024-09-14 06:41:52 +00:00
ShaderUIColor[] GetShaderUIColors();
2025-06-19 17:22:25 +00:00
// List<ActiveStyleTransition<UIColor,ColorPropertyName>> GetActiveShaderUIColorTransitions();
2024-09-14 06:41:52 +00:00
ShaderUINumber[] GetShaderUINumbers();
2025-06-19 17:22:25 +00:00
// List<ActiveStyleTransition<UINumber,FloatPropertyName>> GetActiveShaderUINumberTransitions();
2024-09-14 06:41:52 +00:00
TransitionSettingsAll GetTransitionSettingsAll();
UINumberTransition[] GetNumberTransitions();
2025-06-19 17:22:25 +00:00
List<ActiveStyleTransition<UINumber,UIStyleNumberPropertyAndName>> GetActiveUINumberTransitions();
2024-09-14 06:41:52 +00:00
UIColorTransition[] GetColorTransitions();
2025-06-19 17:22:25 +00:00
List<ActiveStyleTransition<UIColor,UIStyleColorPropertyAndName>> GetActiveUIColorTransitions();
List<UISelectorFlag> GetUISelectorFlags();
List<UISelectorFlag> GetParentUISelectorFlags();
void AddUISelectorFlag( UISelectorFlag flag, string reference = "" );
void RemoveUISelectorFlag( UISelectorFlag flag, string reference = "" );
2025-06-23 11:16:01 +00:00
}
public interface UIStylePropertyContainerNode:UIStylePropertyContainer
{
public int GetUIAncestorDepth();
public void ResetDirtyFlags();
public void SetAnimatedFlag();
public void SetLayoutDirtyFlag();
public bool IsDirty();
}
public static class UIStylePropertyContainers
{
public static void SetDirty( this UIStylePropertyContainerNode container )
{
if ( ! ( container is UIHolderControl ) )
{
return;
}
var control = container as UIHolderControl;
var ui = control.GetUI();
2025-06-19 17:22:25 +00:00
2025-06-23 11:16:01 +00:00
if ( ui == null )
{
return;
}
ui.SetDirty( container );
}
public static void CommitUpdateInfo( this UIStylePropertyContainerNode container )
{
if ( ! ( container is UIHolderControl ) )
{
return;
}
var control = container as UIHolderControl;
var ui = control.GetUI();
if ( ui == null )
{
return;
}
ui.SetUpdated( container );
}
public static bool HasActiveTransitions( this UIStylePropertyContainer container )
{
var animatedNumber = container.GetActiveUINumberTransitions().Find( n => n != null && n.transitioning );
if ( animatedNumber != null )
{
return true;
}
var animatedColor = container.GetActiveUIColorTransitions().Find( n => n != null && n.transitioning );
if ( animatedColor != null )
{
return true;
}
return false;
}
2024-08-09 13:52:49 +00:00
}
2025-06-23 11:16:01 +00:00
2024-08-09 13:52:49 +00:00
}