Files
RebootKit/Runtime/Engine/Code/UI/IVisualElementBuilder.cs
2025-03-30 16:06:57 +02:00

90 lines
2.4 KiB
C#

using System.Collections.Generic;
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.UIElements;
namespace RebootKit.Engine.UI {
public static class Classes {
public const string k_Base = "rr__base";
public const string k_Label = "rr__label";
public const string k_Button = "rr__button";
}
public interface IVisualElementBuilder {
VisualElement Build();
}
public class VisualElementBuilder : IVisualElementBuilder {
readonly List<string> m_ClassNames = new();
Color? m_BackgroundColor;
float2? m_Size;
VisualElementBuilder() {
}
public VisualElementBuilder Class(string className) {
m_ClassNames.Add(className);
return this;
}
public VisualElementBuilder Class(params string[] classNames) {
foreach (string className in classNames) {
m_ClassNames.Add(className);
}
return this;
}
public VisualElementBuilder BackgroundColor(Color color) {
m_BackgroundColor = color;
return this;
}
public VisualElementBuilder Size(float2 size) {
m_Size = size;
return this;
}
public VisualElement Build() {
VisualElement element = new();
element.AddToClassList(Classes.k_Base);
foreach (string className in m_ClassNames) {
element.AddToClassList(className);
}
if (m_BackgroundColor.HasValue) {
element.style.backgroundColor = m_BackgroundColor.Value;
}
if (m_Size.HasValue) {
element.style.width = m_Size.Value.x;
element.style.height = m_Size.Value.y;
}
return element;
}
public static VisualElementBuilder New() {
return new VisualElementBuilder();
}
}
public readonly struct LabelBuilder : IVisualElementBuilder {
readonly string m_Text;
LabelBuilder(string text) {
m_Text = text;
}
public VisualElement Build() {
Label label = new(m_Text);
label.AddToClassList(Classes.k_Base);
label.AddToClassList(Classes.k_Label);
return label;
}
public static LabelBuilder New(string text) => new(text);
}
}