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