Add parsing for Size.

This commit is contained in:
2025-06-29 23:27:16 +02:00
parent 5d3a2c2222
commit c6e1bf7f41
8 changed files with 89 additions and 19 deletions

View File

@@ -1,6 +1,7 @@
[Button] [Button]
BackgroundColor = "#0f62fe" BackgroundColor = "#0f62fe"
TextColor = "#ffffff" TextColor = "#ffffff"
# Padding = [0.0, 12.0, 8.0, 0.0]
Padding = 16.0 Padding = 16.0
# Creates an empty rule for Button.Normal. # Creates an empty rule for Button.Normal.
@@ -40,6 +41,24 @@ BackgroundColor = "#0353e9"
BackgroundColor = "#002d9c" BackgroundColor = "#002d9c"
BorderColor = [0, 0, 0, 0] BorderColor = [0, 0, 0, 0]
[Button.Link]
BackgroundColor = [0, 0, 0, 0]
TextColor = "#0f62fe"
Padding = 0.0
[Button.Link.Normal]
[Button.Link.Hovered]
BorderColor = "#0043ce"
TextColor = "#0043ce"
BorderSize = [0, 0, 0, 1]
[Button.Link.Pressed]
TextColor = "#161616"
BorderSize = [0, 0, 0, 1]
BorderColor = "#161616"
# Default background color for all Container derived classes. # Default background color for all Container derived classes.
[Container] [Container]
BackgroundColor = "#e0e0e0" BackgroundColor = "#e0e0e0"

View File

@@ -22,6 +22,8 @@ public class TestGame : Game
_uiSystem = new UISystem(Input); _uiSystem = new UISystem(Input);
// _uiSystem.RenderDebugRects = true; // _uiSystem.RenderDebugRects = true;
ResourceManager.EnableFileWatching();
_particleSystem = new ParticleSystem(); _particleSystem = new ParticleSystem();
AddSystemToUpdate(_uiSystem); AddSystemToUpdate(_uiSystem);
@@ -80,8 +82,9 @@ public class TestGame : Game
var outlineButton = new Button("Outline button", _defaultFontSet); var outlineButton = new Button("Outline button", _defaultFontSet);
outlineButton.StyleVariant = "Outline"; outlineButton.StyleVariant = "Outline";
_buttonContainer.AddChild(addButton); var linkButton = new Button("Link button", _defaultFontSet);
_buttonContainer.AddChild(removeButton); linkButton.StyleVariant = "Link";
var c = new HorizontalContainer() var c = new HorizontalContainer()
{ {
@@ -93,6 +96,7 @@ public class TestGame : Game
c.AddChild(addButton); c.AddChild(addButton);
c.AddChild(removeButton); c.AddChild(removeButton);
c.AddChild(outlineButton); c.AddChild(outlineButton);
c.AddChild(linkButton);
var vc = new VerticalContainer(0.0f); var vc = new VerticalContainer(0.0f);
vc.AddChild(c); vc.AddChild(c);

View File

@@ -80,6 +80,14 @@ namespace Voile.Resources.DataReaders
/// <returns></returns> /// <returns></returns>
Vector2 GetVector2(string key, Vector2 defaultValue); Vector2 GetVector2(string key, Vector2 defaultValue);
/// <summary>
/// Get a <see cref="Size"/> from this data getter.
/// </summary>
/// <param name="key">Key of the value.</param>
/// <param name="defaultValue">Default value in case this getter fails to get data.</param>
/// <returns></returns>
Size GetSize(string key, Size defaultValue);
T[] GetArray<T>(string key, T[] defaultValue); T[] GetArray<T>(string key, T[] defaultValue);
} }
} }

View File

@@ -143,7 +143,7 @@ public class TomlDataReader : IStreamDataReader, IDataValidator, IStreamKeyValue
} }
else else
{ {
throw new ArgumentException("Color can only be represented as an array of integers in the range of 0-255, array of floats (0-1), hexadecimal, or hex string."); return defaultValue;
} }
} }
@@ -156,6 +156,39 @@ public class TomlDataReader : IStreamDataReader, IDataValidator, IStreamKeyValue
return new Vector2(arr[0], arr[1]); return new Vector2(arr[0], arr[1]);
} }
public Size GetSize(string key, Size defaultValue)
{
if (!TryGetNode(key, out var node))
return defaultValue;
if (node.IsInteger)
{
return new Size(node.AsInteger);
}
else if (node.IsFloat)
{
return new Size(node.AsFloat);
}
else if (node.IsArray)
{
var sizeArray = node.AsArray;
var lNode = sizeArray[0];
var rNode = sizeArray[1];
var tNode = sizeArray[2];
var bNode = sizeArray[3];
var l = lNode.IsInteger ? lNode.AsInteger : 0;
var t = tNode.IsInteger ? tNode.AsInteger : 0;
var r = rNode.IsInteger ? rNode.AsInteger : 0;
var b = bNode.IsInteger ? bNode.AsInteger : 0;
return new Size(l, r, t, b);
}
return defaultValue;
}
public T[] GetArray<T>(string key, T[] defaultValue) public T[] GetArray<T>(string key, T[] defaultValue)
{ {
throw new NotImplementedException("Generic array reading not implemented yet."); throw new NotImplementedException("Generic array reading not implemented yet.");
@@ -192,6 +225,7 @@ public class TomlDataReader : IStreamDataReader, IDataValidator, IStreamKeyValue
return false; return false;
} }
private TomlTable? _table; private TomlTable? _table;
private bool _valid; private bool _valid;

View File

@@ -14,9 +14,9 @@ public class Style
public Style() { } public Style() { }
public Size Padding { get; set; } public Size? Padding { get; set; }
public Color? BackgroundColor { get; set; } public Color? BackgroundColor { get; set; }
public Size BorderSize { get; set; } public Size? BorderSize { get; set; }
public Color? BorderColor { get; set; } public Color? BorderColor { get; set; }
public float CornerRadius { get; set; } public float CornerRadius { get; set; }
public Color? TextColor { get; set; } public Color? TextColor { get; set; }
@@ -67,10 +67,10 @@ public class StyleSheetLoader : ResourceLoader<StyleSheet>
style.TextColor = reader.GetColor("TextColor", Color.Black); style.TextColor = reader.GetColor("TextColor", Color.Black);
if (reader.HasKey("Padding")) if (reader.HasKey("Padding"))
style.Padding = new Size(reader.GetFloat("Padding")); style.Padding = reader.GetSize("Padding", Size.Zero);
if (reader.HasKey("BorderSize")) if (reader.HasKey("BorderSize"))
style.BorderSize = new Size(reader.GetFloat("BorderSize")); style.BorderSize = reader.GetSize("BorderSize", Size.Zero);
if (reader.HasKey("BorderColor")) if (reader.HasKey("BorderColor"))
style.BorderColor = reader.GetColor("BorderColor", Color.Transparent); style.BorderColor = reader.GetColor("BorderColor", Color.Transparent);

View File

@@ -121,44 +121,49 @@ public abstract class UIElement : IElement, IRenderableElement, IResizeableEleme
var borderColor = style.BorderColor ?? Color.Transparent; var borderColor = style.BorderColor ?? Color.Transparent;
var borderSize = style.BorderSize; var borderSize = style.BorderSize;
var borderLeft = borderSize?.Left ?? 0;
var borderRight = borderSize?.Right ?? 0;
var borderTop = borderSize?.Top ?? 0;
var borderBottom = borderSize?.Bottom ?? 0;
renderer.SetTransform(GlobalPosition, Vector2.Zero); renderer.SetTransform(GlobalPosition, Vector2.Zero);
renderer.DrawRectangle(new Vector2(Size.Width, Size.Height), backgroundColor); renderer.DrawRectangle(new Vector2(Size.Width, Size.Height), backgroundColor);
if (borderSize.Left > 0) if (borderLeft > 0)
{ {
renderer.SetTransform(GlobalPosition, Vector2.Zero); renderer.SetTransform(GlobalPosition, Vector2.Zero);
renderer.DrawRectangle( renderer.DrawRectangle(
new Vector2(borderSize.Left, Size.Height), new Vector2(borderLeft, Size.Height),
borderColor borderColor
); );
} }
if (borderSize.Top > 0) if (borderTop > 0)
{ {
renderer.SetTransform(GlobalPosition, Vector2.Zero); renderer.SetTransform(GlobalPosition, Vector2.Zero);
renderer.DrawRectangle( renderer.DrawRectangle(
new Vector2(Size.Width, borderSize.Top), new Vector2(Size.Width, borderTop),
borderColor borderColor
); );
} }
if (borderSize.Right > 0) if (borderRight > 0)
{ {
var rightX = GlobalPosition.X + Size.Width - borderSize.Right; var rightX = GlobalPosition.X + Size.Width - borderRight;
renderer.SetTransform(new Vector2(rightX, GlobalPosition.Y), Vector2.Zero); renderer.SetTransform(new Vector2(rightX, GlobalPosition.Y), Vector2.Zero);
renderer.DrawRectangle( renderer.DrawRectangle(
new Vector2(borderSize.Right, Size.Height), new Vector2(borderRight, Size.Height),
borderColor borderColor
); );
} }
if (borderSize.Bottom > 0) if (borderBottom > 0)
{ {
var bottomY = GlobalPosition.Y + Size.Height - borderSize.Bottom; var bottomY = GlobalPosition.Y + Size.Height - borderBottom;
renderer.SetTransform(new Vector2(GlobalPosition.X, bottomY), Vector2.Zero); renderer.SetTransform(new Vector2(GlobalPosition.X, bottomY), Vector2.Zero);
renderer.DrawRectangle( renderer.DrawRectangle(
new Vector2(Size.Width, borderSize.Bottom), new Vector2(Size.Width, borderBottom),
borderColor borderColor
); );
} }

View File

@@ -88,7 +88,7 @@ public class Button : Widget
MarkDirty(); MarkDirty();
} }
_padding = style.Padding; _padding = style.Padding ?? Voile.Size.Zero;
var textColor = style.TextColor ?? Color.Black; var textColor = style.TextColor ?? Color.Black;
// renderer.SetTransform(GlobalPosition, Vector2.Zero); // renderer.SetTransform(GlobalPosition, Vector2.Zero);

View File

@@ -14,7 +14,7 @@ public class FileSystemFile : VirtualFile
public override Stream GetStream() public override Stream GetStream()
{ {
return new FileStream(_fsPath, FileMode.Open, FileAccess.Read); return new FileStream(_fsPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete);
} }
private string _fsPath; private string _fsPath;