using Godot; using Rokojori; using System.Collections.Generic; namespace Rokojori { public interface UIStylePropertyContainer { UIStyle GetUIStyleParent(); UIPosition GetUIPosition(); UILayout GetUILayout(); UILineWrap GetUILineWrap(); Vector2 GetUISize(); Font GetFont(); UINumber GetUIStyleNumberProperty( UIStyleNumberProperty property, string shaderPropertyName, UIStylePropertyContainer source ); void SetUIStyleNumberProperty( UIStyleNumberProperty property, UINumber number ); UIColor GetUIStyleColorProperty( UIStyleColorProperty property, string shaderPropertyName, UIStylePropertyContainer source ); ShaderUIColor[] GetShaderUIColors(); // List> GetActiveShaderUIColorTransitions(); ShaderUINumber[] GetShaderUINumbers(); // List> GetActiveShaderUINumberTransitions(); TransitionSettingsAll GetTransitionSettingsAll(); UINumberTransition[] GetNumberTransitions(); List> GetActiveUINumberTransitions(); UIColorTransition[] GetColorTransitions(); List> GetActiveUIColorTransitions(); List GetUISelectorFlags(); List GetParentUISelectorFlags(); void AddUISelectorFlag( UISelectorFlag flag, string reference = "" ); void RemoveUISelectorFlag( UISelectorFlag flag, string reference = "" ); } 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(); 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; } } }