55 lines
1.2 KiB
C#
55 lines
1.2 KiB
C#
using System.Numerics;
|
|
using Voile.Rendering;
|
|
using Voile.Utils;
|
|
|
|
namespace Voile.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<UIElement> children;
|
|
protected UIElement? parent;
|
|
|
|
private Logger _logger = new(nameof(UIElement));
|
|
}
|
|
|
|
|
|
[Flags]
|
|
public enum SizeFlags
|
|
{
|
|
ShrinkBegin,
|
|
ShrinkCenter,
|
|
ShrinkEnd,
|
|
Fill
|
|
} |