Add parsing for Size.
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user