Refactor BindButtonIcon

This commit is contained in:
Gustas
2022-09-19 12:55:17 +03:00
committed by Matthias Mailänder
parent 3de0b7982e
commit 686f158117
6 changed files with 114 additions and 113 deletions

View File

@@ -25,6 +25,7 @@ namespace OpenRA.Mods.Common.Widgets
public bool ClickThrough = true;
public Func<string> GetImageName;
public Func<string> GetImageCollection;
public Func<Sprite> GetSprite;
public string TooltipText;
@@ -48,6 +49,8 @@ namespace OpenRA.Mods.Common.Widgets
GetTooltipText = () => TooltipText;
tooltipContainer = Exts.Lazy(() =>
Ui.Root.Get<TooltipContainerWidget>(TooltipContainer));
GetSprite = () => getImageCache.Update((GetImageCollection(), GetImageName()));
}
protected ImageWidget(ImageWidget other)
@@ -64,14 +67,15 @@ namespace OpenRA.Mods.Common.Widgets
GetTooltipText = other.GetTooltipText;
tooltipContainer = Exts.Lazy(() =>
Ui.Root.Get<TooltipContainerWidget>(TooltipContainer));
GetSprite = () => getImageCache.Update((GetImageCollection(), GetImageName()));
}
public override Widget Clone() { return new ImageWidget(this); }
public override void Draw()
{
var sprite = getImageCache.Update((GetImageCollection(), GetImageName()));
WidgetUtils.DrawSprite(sprite, RenderOrigin);
WidgetUtils.DrawSprite(GetSprite(), RenderOrigin);
}
public override bool HandleMouseInput(MouseInput mi)

View File

@@ -313,49 +313,8 @@ namespace OpenRA.Mods.Common.Widgets
{
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;
}
};
var cache = GetCachedStatefulImage(icon.ImageCollection, icon.ImageName);
icon.GetSprite = () => cache.Update((button.IsDisabled(), button.Depressed, Ui.MouseOverWidget == button, false, button.IsHighlighted()));
}
public static void BindPlayerNameAndStatus(LabelWidget label, Player p)