diff --git a/Robust.Client/UserInterface/Controls/BaseButton.cs b/Robust.Client/UserInterface/Controls/BaseButton.cs
index d590b9619c7..f3dfc4b71ce 100644
--- a/Robust.Client/UserInterface/Controls/BaseButton.cs
+++ b/Robust.Client/UserInterface/Controls/BaseButton.cs
@@ -174,10 +174,16 @@ public bool ToggleMode
[ViewVariables]
public bool IsHovered => _beingHovered;
+ ///
+ /// If true, this button is currently being pressed down by the mouse.
+ ///
+ public bool AttemptingPress => _attemptingPress > 0;
+
///
/// Draw mode used for styling of buttons.
///
[ViewVariables]
+ [Obsolete("Use BaseButton.{Disabled,Pressed,AttemptingPress,IsHovered} directly instead.")]
public DrawModeEnum DrawMode
{
get
@@ -186,11 +192,11 @@ public DrawModeEnum DrawMode
{
return DrawModeEnum.Disabled;
}
- else if (Pressed || (_attemptingPress > 0 && IsHovered))
+ else if (Pressed || (AttemptingPress && IsHovered))
{
return DrawModeEnum.Pressed;
}
- else if (IsHovered || _attemptingPress > 0)
+ else if (IsHovered || AttemptingPress)
{
return DrawModeEnum.Hover;
}
diff --git a/Robust.Client/UserInterface/Controls/ContainerButton.cs b/Robust.Client/UserInterface/Controls/ContainerButton.cs
index f981e9f766c..6ca7c7350c1 100644
--- a/Robust.Client/UserInterface/Controls/ContainerButton.cs
+++ b/Robust.Client/UserInterface/Controls/ContainerButton.cs
@@ -10,9 +10,32 @@ public class ContainerButton : BaseButton
{
public const string StylePropertyStyleBox = "stylebox";
public const string StyleClassButton = "button";
+
+ ///
+ /// The button is toggled off.
+ ///
+ /// Mutually exclusive with
public const string StylePseudoClassNormal = "normal";
+
+ ///
+ /// The button is toggled on.
+ ///
+ /// Mutually exclusive with
public const string StylePseudoClassPressed = "pressed";
+
+ ///
+ /// The mouse is actively attempting to press/toggle the button.
+ ///
+ public const string StylePseudoClassPressing = "pressing";
+
+ ///
+ /// The mouse is hovering over the button.
+ ///
public const string StylePseudoClassHover = "hover";
+
+ ///
+ /// The button is not taking any interaction.
+ ///
public const string StylePseudoClassDisabled = "disabled";
public StyleBox? StyleBoxOverride { get; set; }
@@ -78,23 +101,16 @@ protected internal override void Draw(DrawingHandleScreen handle)
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();
- }
+ SetOnlyStylePseudoClass(Pressed ? StylePseudoClassPressed : StylePseudoClassNormal);
+
+ if (Disabled)
+ AddStylePseudoClass(StylePseudoClassDisabled);
+
+ if (IsHovered)
+ AddStylePseudoClass(StylePseudoClassHover);
+
+ if (AttemptingPress)
+ AddStylePseudoClass(StylePseudoClassPressing);
}
}
}
diff --git a/Robust.Client/UserInterface/Stylesheets/DefaultStylesheet.cs b/Robust.Client/UserInterface/Stylesheets/DefaultStylesheet.cs
index 72575887cec..ad1d4225dde 100644
--- a/Robust.Client/UserInterface/Stylesheets/DefaultStylesheet.cs
+++ b/Robust.Client/UserInterface/Stylesheets/DefaultStylesheet.cs
@@ -177,6 +177,20 @@ public DefaultStylesheet(IResourceCache res, IUserInterfaceManager userInterface
ContentMarginTopOverride = 3,
}),
+ // Button style pressing (same as pressed)
+ Element().Class(ContainerButton.StyleClassButton).Pseudo(ContainerButton.StylePseudoClassPressing)
+ .Prop(ContainerButton.StylePropertyStyleBox, new StyleBoxFlat
+ {
+ BackgroundColor = theme.ResolveColorOrSpecified("buttonBackgroundPressed", Color.FromHex("#173717")),
+ BorderThickness = new Thickness(1),
+ BorderColor = theme.ResolveColorOrSpecified("buttonBorderPressed", Color.FromHex("#447044")),
+ Padding = new Thickness(3),
+ ContentMarginBottomOverride = 3,
+ ContentMarginLeftOverride = 5,
+ ContentMarginRightOverride = 5,
+ ContentMarginTopOverride = 3,
+ }),
+
// Button style disabled
Element().Class(ContainerButton.StyleClassButton).Pseudo(ContainerButton.StylePseudoClassDisabled)
.Prop(ContainerButton.StylePropertyStyleBox, new StyleBoxFlat