using Godot; namespace Rokojori { [Tool] [GlobalClass] public partial class UI : Control { [Export] public UISettings settings; [Export] public UINumber fontSize; [Export] public float fontZoom = 1; [Export] public float X_computedFontSizePixels = 1; [Export] public bool updateFlag = false; [Export] public bool updateAlways = true; public override void _Process( double delta ) { UpdateFontSize(); UpdateUIElements(); } void UpdateFontSize() { X_computedFontSizePixels = UINumber.Compute( this, fontSize ) * fontZoom; if ( Theme != null ) { Theme.DefaultFontSize = Mathf.RoundToInt( X_computedFontSizePixels ); } } void UpdateUIElements() { if ( ! ( updateFlag || updateAlways ) ) { return; } updateFlag = false; Nodes.ForEachDirectChild( this, r => r.Layout() ); } public static float GetWindowWidth( Control control ) { if ( Engine.IsEditorHint() ) { return ProjectSettings.GetSetting( "display/window/size/viewport_width" ).AsInt32(); } else { return control.GetWindow().Size.X; } } public static float GetWindowHeight( Control control ) { if ( Engine.IsEditorHint() ) { return ProjectSettings.GetSetting( "display/window/size/viewport_height" ).AsInt32(); } else { return control.GetWindow().Size.Y; } } } }