using System.Numerics; using DaggerFramework.Rendering; using DaggerFramework.Utils; namespace DaggerFramework.UI; public abstract class UIElement { public Rect Rect { get; set; } = new Rect(); public SizeFlags VerticalSizeFlags { get; set; } = SizeFlags.Fill; public SizeFlags HorizontalSizeFlags { get; set; } = SizeFlags.Fill; public Vector2 ExpandRatio { get; set; } = Vector2.One; public UIElement() { children = new(); } public void AddChild(UIElement child) { children.Add(child); child.parent = this; } public void Render(Renderer renderer) { Vector2 parentPos = parent != null ? parent.Rect.Position : Vector2.Zero; renderer.SetTransform(Rect.Position + parentPos, Vector2.Zero, 0); OnRender(renderer); foreach (UIElement child in children) { renderer.SetTransform(child.Rect.Position, Vector2.Zero, 0); child.Render(renderer); } } protected abstract void OnRender(Renderer renderer); protected List children; protected UIElement? parent; private Logger _logger = new(nameof(UIElement)); } [Flags] public enum SizeFlags { ShrinkBegin, ShrinkCenter, ShrinkEnd, Fill }