Add parsing for Size.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
[Button]
|
||||
BackgroundColor = "#0f62fe"
|
||||
TextColor = "#ffffff"
|
||||
# Padding = [0.0, 12.0, 8.0, 0.0]
|
||||
Padding = 16.0
|
||||
|
||||
# Creates an empty rule for Button.Normal.
|
||||
@@ -40,6 +41,24 @@ BackgroundColor = "#0353e9"
|
||||
BackgroundColor = "#002d9c"
|
||||
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.
|
||||
[Container]
|
||||
BackgroundColor = "#e0e0e0"
|
||||
|
||||
@@ -22,6 +22,8 @@ public class TestGame : Game
|
||||
_uiSystem = new UISystem(Input);
|
||||
// _uiSystem.RenderDebugRects = true;
|
||||
|
||||
ResourceManager.EnableFileWatching();
|
||||
|
||||
_particleSystem = new ParticleSystem();
|
||||
|
||||
AddSystemToUpdate(_uiSystem);
|
||||
@@ -80,8 +82,9 @@ public class TestGame : Game
|
||||
var outlineButton = new Button("Outline button", _defaultFontSet);
|
||||
outlineButton.StyleVariant = "Outline";
|
||||
|
||||
_buttonContainer.AddChild(addButton);
|
||||
_buttonContainer.AddChild(removeButton);
|
||||
var linkButton = new Button("Link button", _defaultFontSet);
|
||||
linkButton.StyleVariant = "Link";
|
||||
|
||||
|
||||
var c = new HorizontalContainer()
|
||||
{
|
||||
@@ -93,6 +96,7 @@ public class TestGame : Game
|
||||
c.AddChild(addButton);
|
||||
c.AddChild(removeButton);
|
||||
c.AddChild(outlineButton);
|
||||
c.AddChild(linkButton);
|
||||
|
||||
var vc = new VerticalContainer(0.0f);
|
||||
vc.AddChild(c);
|
||||
|
||||
@@ -80,6 +80,14 @@ namespace Voile.Resources.DataReaders
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -143,7 +143,7 @@ public class TomlDataReader : IStreamDataReader, IDataValidator, IStreamKeyValue
|
||||
}
|
||||
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]);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
throw new NotImplementedException("Generic array reading not implemented yet.");
|
||||
@@ -192,6 +225,7 @@ public class TomlDataReader : IStreamDataReader, IDataValidator, IStreamKeyValue
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private TomlTable? _table;
|
||||
private bool _valid;
|
||||
|
||||
|
||||
@@ -14,9 +14,9 @@ public class Style
|
||||
|
||||
public Style() { }
|
||||
|
||||
public Size Padding { get; set; }
|
||||
public Size? Padding { get; set; }
|
||||
public Color? BackgroundColor { get; set; }
|
||||
public Size BorderSize { get; set; }
|
||||
public Size? BorderSize { get; set; }
|
||||
public Color? BorderColor { get; set; }
|
||||
public float CornerRadius { get; set; }
|
||||
public Color? TextColor { get; set; }
|
||||
@@ -67,10 +67,10 @@ public class StyleSheetLoader : ResourceLoader<StyleSheet>
|
||||
style.TextColor = reader.GetColor("TextColor", Color.Black);
|
||||
|
||||
if (reader.HasKey("Padding"))
|
||||
style.Padding = new Size(reader.GetFloat("Padding"));
|
||||
style.Padding = reader.GetSize("Padding", Size.Zero);
|
||||
|
||||
if (reader.HasKey("BorderSize"))
|
||||
style.BorderSize = new Size(reader.GetFloat("BorderSize"));
|
||||
style.BorderSize = reader.GetSize("BorderSize", Size.Zero);
|
||||
|
||||
if (reader.HasKey("BorderColor"))
|
||||
style.BorderColor = reader.GetColor("BorderColor", Color.Transparent);
|
||||
|
||||
@@ -121,44 +121,49 @@ public abstract class UIElement : IElement, IRenderableElement, IResizeableEleme
|
||||
var borderColor = style.BorderColor ?? Color.Transparent;
|
||||
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.DrawRectangle(new Vector2(Size.Width, Size.Height), backgroundColor);
|
||||
|
||||
if (borderSize.Left > 0)
|
||||
if (borderLeft > 0)
|
||||
{
|
||||
renderer.SetTransform(GlobalPosition, Vector2.Zero);
|
||||
renderer.DrawRectangle(
|
||||
new Vector2(borderSize.Left, Size.Height),
|
||||
new Vector2(borderLeft, Size.Height),
|
||||
borderColor
|
||||
);
|
||||
}
|
||||
|
||||
if (borderSize.Top > 0)
|
||||
if (borderTop > 0)
|
||||
{
|
||||
renderer.SetTransform(GlobalPosition, Vector2.Zero);
|
||||
renderer.DrawRectangle(
|
||||
new Vector2(Size.Width, borderSize.Top),
|
||||
new Vector2(Size.Width, borderTop),
|
||||
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.DrawRectangle(
|
||||
new Vector2(borderSize.Right, Size.Height),
|
||||
new Vector2(borderRight, Size.Height),
|
||||
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.DrawRectangle(
|
||||
new Vector2(Size.Width, borderSize.Bottom),
|
||||
new Vector2(Size.Width, borderBottom),
|
||||
borderColor
|
||||
);
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ public class Button : Widget
|
||||
MarkDirty();
|
||||
}
|
||||
|
||||
_padding = style.Padding;
|
||||
_padding = style.Padding ?? Voile.Size.Zero;
|
||||
var textColor = style.TextColor ?? Color.Black;
|
||||
|
||||
// renderer.SetTransform(GlobalPosition, Vector2.Zero);
|
||||
|
||||
@@ -14,7 +14,7 @@ public class FileSystemFile : VirtualFile
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user