Files
RobustToolbox/Robust.Client/UserInterface/Controls/TextureButton.cs
T
Pieter-Jan Briers 8aaacce195 Fix TextureRect and TextureButton UI scaling.
Thanks to nirnael for helping me investigate this and getting me to do it.
2019-10-10 17:14:00 +02:00

83 lines
2.4 KiB
C#

using System;
using Robust.Client.Graphics;
using Robust.Client.Graphics.Drawing;
using Robust.Shared.Maths;
namespace Robust.Client.UserInterface.Controls
{
public class TextureButton : BaseButton
{
private Vector2 _scale = (1, 1);
public const string StylePropertyTexture = "texture";
public const string StylePseudoClassNormal = "normal";
public const string StylePseudoClassHover = "hover";
public const string StylePseudoClassDisabled = "disabled";
public const string StylePseudoClassPressed = "pressed";
public TextureButton()
{
DrawModeChanged();
}
public Texture TextureNormal { get; set; }
public Texture TextureHover { get; set; }
public Vector2 Scale
{
get => _scale;
set
{
_scale = value;
MinimumSizeChanged();
}
}
protected override void DrawModeChanged()
{
switch (DrawMode)
{
case DrawModeEnum.Normal:
SetOnlyStylePseudoClass(StylePseudoClassNormal);
break;
case DrawModeEnum.Pressed:
SetOnlyStylePseudoClass(StylePseudoClassPressed);
break;
case DrawModeEnum.Hover:
SetOnlyStylePseudoClass(StylePseudoClassHover);
break;
case DrawModeEnum.Disabled:
SetOnlyStylePseudoClass(StylePseudoClassDisabled);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
protected internal override void Draw(DrawingHandleScreen handle)
{
var texture = TextureNormal;
if (IsHovered && TextureHover != null)
{
texture = TextureHover;
}
if (texture == null)
{
TryGetStyleProperty(StylePropertyTexture, out texture);
if (texture == null)
{
return;
}
}
handle.DrawTextureRectRegion(texture, PixelSizeBox);
}
protected override Vector2 CalculateMinimumSize()
{
return Scale * (TextureNormal?.Size ?? Vector2.Zero);
}
}
}