Refactor command bar buttons to use unified widget state names

This commit is contained in:
Ivaylo Draganov
2020-05-12 00:12:35 +03:00
committed by Paul Chote
parent 7943f4deb6
commit 39ccac4022
3 changed files with 59 additions and 34 deletions

View File

@@ -14,6 +14,7 @@ using System.Linq;
using OpenRA.Graphics;
using OpenRA.Network;
using OpenRA.Primitives;
using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets
{
@@ -283,6 +284,55 @@ namespace OpenRA.Mods.Common.Widgets
button.GetTooltipText = null;
}
public static void BindButtonIcon(ButtonWidget button)
{
var icon = button.Get<ImageWidget>("ICON");
var hasActiveImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active") != null;
var hasActiveDisabledImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-disabled") != null;
var hasActivePressedImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-pressed") != null;
var hasActiveHoverImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-hover") != null;
var hasImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName) != null;
var hasDisabledImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-disabled") != null;
var hasPressedImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-pressed") != null;
var hasHoverImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-hover") != null;
icon.GetImageName = () =>
{
var isActive = button.IsHighlighted();
var isDisabled = button.IsDisabled();
var isPressed = button.Depressed;
var isHovered = Ui.MouseOverWidget == button;
var baseName = button.IsHighlighted() ? icon.ImageName + "-active" : icon.ImageName;
var stateName = WidgetUtils.GetStatefulImageName(baseName, isDisabled, isPressed, isHovered);
if (isActive)
{
if (isDisabled)
return hasActiveDisabledImage ? stateName : hasActiveImage ? baseName : icon.ImageName;
else if (isPressed)
return hasActivePressedImage ? stateName : hasActiveImage ? baseName : icon.ImageName;
else if (isHovered)
return hasActiveHoverImage ? stateName : hasActiveImage ? baseName : icon.ImageName;
else
return hasActiveImage ? baseName : icon.ImageName;
}
else
{
if (isDisabled)
return hasDisabledImage ? stateName : baseName;
else if (isPressed)
return hasPressedImage ? stateName : baseName;
else if (isHovered)
return hasHoverImage ? stateName : baseName;
else
return baseName;
}
};
}
public static void BindPlayerNameAndStatus(LabelWidget label, Player p)
{
var client = p.World.LobbyInfo.ClientWithIndex(p.ClientIndex);