Refactor BindButtonIcon
This commit is contained in:
committed by
Matthias Mailänder
parent
3de0b7982e
commit
686f158117
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user