105 lines
2.7 KiB
C#
105 lines
2.7 KiB
C#
using Robust.Client.Graphics.Drawing;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Shared.Maths;
|
|
|
|
namespace Content.Client.UserInterface
|
|
{
|
|
public class StripeBack : Container
|
|
{
|
|
private const float PadSize = 4;
|
|
private const float EdgeSize = 2;
|
|
private static readonly Color EdgeColor = Color.FromHex("#525252ff");
|
|
|
|
private bool _hasTopEdge = true;
|
|
private bool _hasBottomEdge = true;
|
|
|
|
public const string StylePropertyBackground = "background";
|
|
|
|
public bool HasTopEdge
|
|
{
|
|
get => _hasTopEdge;
|
|
set
|
|
{
|
|
MinimumSizeChanged();
|
|
_hasTopEdge = value;
|
|
}
|
|
}
|
|
|
|
public bool HasBottomEdge
|
|
{
|
|
get => _hasBottomEdge;
|
|
set
|
|
{
|
|
_hasBottomEdge = value;
|
|
MinimumSizeChanged();
|
|
}
|
|
}
|
|
|
|
protected override Vector2 CalculateMinimumSize()
|
|
{
|
|
var size = Vector2.Zero;
|
|
|
|
foreach (var child in Children)
|
|
{
|
|
size = Vector2.ComponentMax(size, child.CombinedMinimumSize);
|
|
}
|
|
|
|
if (HasBottomEdge)
|
|
{
|
|
size += (0, PadSize + EdgeSize);
|
|
}
|
|
|
|
if (HasTopEdge)
|
|
{
|
|
size += (0, PadSize + EdgeSize);
|
|
}
|
|
|
|
return size;
|
|
}
|
|
|
|
protected override void SortChildren()
|
|
{
|
|
var box = SizeBox;
|
|
|
|
if (HasTopEdge)
|
|
{
|
|
box += (0, PadSize + EdgeSize, 0, 0);
|
|
}
|
|
|
|
if (HasBottomEdge)
|
|
{
|
|
box += (0, 0, 0, -(PadSize + EdgeSize));
|
|
}
|
|
|
|
foreach (var child in Children)
|
|
{
|
|
FitChildInBox(child, box);
|
|
}
|
|
}
|
|
|
|
protected override void Draw(DrawingHandleScreen handle)
|
|
{
|
|
UIBox2 centerBox = PixelSizeBox;
|
|
|
|
if (HasTopEdge)
|
|
{
|
|
centerBox += (0, (PadSize + EdgeSize) * UIScale, 0, 0);
|
|
handle.DrawRect(new UIBox2(0, PadSize * UIScale, PixelWidth, centerBox.Top), EdgeColor);
|
|
}
|
|
|
|
if (HasBottomEdge)
|
|
{
|
|
centerBox += (0, 0, 0, -((PadSize + EdgeSize) * UIScale));
|
|
handle.DrawRect(new UIBox2(0, centerBox.Bottom, PixelWidth, PixelHeight - PadSize * UIScale), EdgeColor);
|
|
}
|
|
|
|
GetActualStyleBox()?.Draw(handle, centerBox);
|
|
}
|
|
|
|
private StyleBox GetActualStyleBox()
|
|
{
|
|
return TryGetStyleProperty(StylePropertyBackground, out StyleBox box) ? box : null;
|
|
}
|
|
}
|
|
}
|