Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions Robust.Client/UserInterface/Controls/BaseButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -174,10 +174,16 @@ public bool ToggleMode
[ViewVariables]
public bool IsHovered => _beingHovered;

/// <summary>
/// If <c>true</c>, this button is currently being pressed down by the mouse.
/// </summary>
public bool AttemptingPress => _attemptingPress > 0;

/// <summary>
/// Draw mode used for styling of buttons.
/// </summary>
[ViewVariables]
[Obsolete("Use BaseButton.{Disabled,Pressed,AttemptingPress,IsHovered} directly instead.")]
public DrawModeEnum DrawMode
{
get
Expand All @@ -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;
}
Expand Down
50 changes: 33 additions & 17 deletions Robust.Client/UserInterface/Controls/ContainerButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,32 @@ public class ContainerButton : BaseButton
{
public const string StylePropertyStyleBox = "stylebox";
public const string StyleClassButton = "button";

/// <summary>
/// The button is toggled off.
/// </summary>
/// <remarks>Mutually exclusive with <see cref="StylePseudoClassPressed"/></remarks>
public const string StylePseudoClassNormal = "normal";

/// <summary>
/// The button is toggled on.
/// </summary>
/// <remarks>Mutually exclusive with <see cref="StylePseudoClassNormal"/></remarks>
public const string StylePseudoClassPressed = "pressed";

/// <summary>
/// The mouse is actively attempting to press/toggle the button.
/// </summary>
public const string StylePseudoClassPressing = "pressing";

/// <summary>
/// The mouse is hovering over the button.
/// </summary>
public const string StylePseudoClassHover = "hover";

/// <summary>
/// The button is not taking any interaction.
/// </summary>
public const string StylePseudoClassDisabled = "disabled";

public StyleBox? StyleBoxOverride { get; set; }
Expand Down Expand Up @@ -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);
}
}
}
14 changes: 14 additions & 0 deletions Robust.Client/UserInterface/Stylesheets/DefaultStylesheet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,20 @@ public DefaultStylesheet(IResourceCache res, IUserInterfaceManager userInterface
ContentMarginTopOverride = 3,
}),

// Button style pressing (same as pressed)
Element<ContainerButton>().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<ContainerButton>().Class(ContainerButton.StyleClassButton).Pseudo(ContainerButton.StylePseudoClassDisabled)
.Prop(ContainerButton.StylePropertyStyleBox, new StyleBoxFlat
Expand Down
Loading