Files
RobustToolbox/Robust.Client/UserInterface/Controls/PanelContainer.cs
T
Pieter-Jan BriersandGitHub ab1f4fb0e7 UI layout v2. (#908)
* UI layout v2.

All controls now act like containers.
Moved anchor/margin layout model to LayoutContainer

Implement basic WPF-like attached properties for the above LayoutContainer.

* Fix VV.
2019-12-05 13:37:58 +01:00

63 lines
1.6 KiB
C#

using JetBrains.Annotations;
using Robust.Client.Graphics.Drawing;
using Robust.Shared.Maths;
namespace Robust.Client.UserInterface.Controls
{
public class PanelContainer : Container
{
public const string StylePropertyPanel = "panel";
private StyleBox _panelOverride;
public StyleBox PanelOverride
{
get => _panelOverride;
set => _panelOverride = value;
}
protected internal override void Draw(DrawingHandleScreen handle)
{
base.Draw(handle);
var style = _getStyleBox();
style?.Draw(handle, PixelSizeBox);
}
protected override void LayoutUpdateOverride()
{
var contentBox = _getStyleBox()?.GetContentBox(PixelSizeBox) ?? SizeBox;
foreach (var child in Children)
{
FitChildInPixelBox(child, (UIBox2i) contentBox);
}
}
protected override Vector2 CalculateMinimumSize()
{
var styleSize = _getStyleBox()?.MinimumSize ?? Vector2.Zero;
var childSize = Vector2.Zero;
foreach (var child in Children)
{
childSize = Vector2.ComponentMax(childSize, child.CombinedMinimumSize);
}
return styleSize / UIScale + childSize;
}
[System.Diagnostics.Contracts.Pure]
[CanBeNull]
private StyleBox _getStyleBox()
{
if (_panelOverride != null)
{
return _panelOverride;
}
TryGetStyleProperty(StylePropertyPanel, out StyleBox box);
return box;
}
}
}