Add GridContainer.
This commit is contained in:
@@ -117,5 +117,5 @@ public class TestGame : Game
|
|||||||
private ResourceRef<Sound> _sound;
|
private ResourceRef<Sound> _sound;
|
||||||
private ResourceRef<Texture2d> _icon;
|
private ResourceRef<Texture2d> _icon;
|
||||||
|
|
||||||
private HorizontalContainer _container = new(spacing: 8.0f);
|
private GridContainer _container = new();
|
||||||
}
|
}
|
||||||
70
Voile/Source/UI/Containers/GridContainer.cs
Normal file
70
Voile/Source/UI/Containers/GridContainer.cs
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
using System.Numerics;
|
||||||
|
using Voile.Rendering;
|
||||||
|
|
||||||
|
namespace Voile.UI.Containers;
|
||||||
|
|
||||||
|
public class GridContainer : Container, IRenderableElement
|
||||||
|
{
|
||||||
|
public int Columns { get; set; } = 2;
|
||||||
|
public float ColumnSpacing { get; set; } = 16.0f;
|
||||||
|
public float RowSpacing { get; set; } = 16.0f;
|
||||||
|
public bool Visible { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
||||||
|
|
||||||
|
public GridContainer(List<IElement> children, int columns = 2, float colSpacing = 16.0f, float rowSpacing = 16.0f)
|
||||||
|
: base(children)
|
||||||
|
{
|
||||||
|
Columns = columns;
|
||||||
|
ColumnSpacing = colSpacing;
|
||||||
|
RowSpacing = rowSpacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GridContainer(int columns = 2, float colSpacing = 16.0f, float rowSpacing = 16.0f)
|
||||||
|
{
|
||||||
|
Columns = columns;
|
||||||
|
ColumnSpacing = colSpacing;
|
||||||
|
RowSpacing = rowSpacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Arrange()
|
||||||
|
{
|
||||||
|
float startX = Position.X;
|
||||||
|
float startY = Position.Y;
|
||||||
|
|
||||||
|
float currentX = startX;
|
||||||
|
float currentY = startY;
|
||||||
|
int colIndex = 0;
|
||||||
|
|
||||||
|
foreach (var child in Children)
|
||||||
|
{
|
||||||
|
child.Position = new Vector2(currentX, currentY);
|
||||||
|
|
||||||
|
float childWidth = 0.0f;
|
||||||
|
float childHeight = 0.0f;
|
||||||
|
|
||||||
|
childWidth = child.Size.Width;
|
||||||
|
childHeight = child.Size.Height;
|
||||||
|
|
||||||
|
colIndex++;
|
||||||
|
|
||||||
|
if (colIndex >= Columns)
|
||||||
|
{
|
||||||
|
colIndex = 0;
|
||||||
|
currentX = startX;
|
||||||
|
currentY += childHeight + RowSpacing;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentX += childWidth + ColumnSpacing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Render(RenderSystem renderer, Style style)
|
||||||
|
{
|
||||||
|
foreach (var child in Children)
|
||||||
|
{
|
||||||
|
if (child is not IRenderableElement renderable) continue;
|
||||||
|
renderable.Render(renderer, style);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user