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

View File

@@ -313,49 +313,8 @@ namespace OpenRA.Mods.Common.Widgets
{ {
var icon = button.Get<ImageWidget>("ICON"); var icon = button.Get<ImageWidget>("ICON");
var hasActiveImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active") != null; var cache = GetCachedStatefulImage(icon.ImageCollection, icon.ImageName);
var hasActiveDisabledImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-disabled") != null; icon.GetSprite = () => cache.Update((button.IsDisabled(), button.Depressed, Ui.MouseOverWidget == button, false, button.IsHighlighted()));
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) public static void BindPlayerNameAndStatus(LabelWidget label, Player p)

View File

@@ -593,44 +593,52 @@ stance-icons:
Regions: Regions:
attack-anything: 768, 119, 16, 16 attack-anything: 768, 119, 16, 16
attack-anything-disabled: 768, 136, 16, 16 attack-anything-disabled: 768, 136, 16, 16
attack-anything-active: 768, 153, 16, 16
defend: 785, 119, 16, 16 defend: 785, 119, 16, 16
defend-disabled: 785, 136, 16, 16 defend-disabled: 785, 136, 16, 16
defend-active: 785, 153, 16, 16
return-fire: 802, 119, 16, 16 return-fire: 802, 119, 16, 16
return-fire-disabled: 802, 136, 16, 16 return-fire-disabled: 802, 136, 16, 16
return-fire-active: 802, 153, 16, 16
hold-fire: 819, 119, 16, 16 hold-fire: 819, 119, 16, 16
hold-fire-disabled: 819, 136, 16, 16 hold-fire-disabled: 819, 136, 16, 16
hold-fire-active: 819, 153, 16, 16
stance-icons-highlighted:
Inherits: stance-icons
Regions:
attack-anything: 768, 153, 16, 16
defend: 785, 153, 16, 16
return-fire: 802, 153, 16, 16
hold-fire: 819, 153, 16, 16
command-icons: command-icons:
Inherits: ^Chrome Inherits: ^Chrome
Regions: Regions:
attack-move: 768, 246, 24, 24 attack-move: 768, 246, 24, 24
attack-move-disabled: 768, 271, 24, 24 attack-move-disabled: 768, 271, 24, 24
attack-move-active: 768, 296, 24, 24
force-move: 793, 246, 24, 24 force-move: 793, 246, 24, 24
force-move-disabled: 793, 271, 24, 24 force-move-disabled: 793, 271, 24, 24
force-move-active: 793, 296, 24, 24
force-attack: 818, 246, 24, 24 force-attack: 818, 246, 24, 24
force-attack-disabled: 818, 271, 24, 24 force-attack-disabled: 818, 271, 24, 24
force-attack-active: 818, 296, 24, 24
guard: 843, 246, 24, 24 guard: 843, 246, 24, 24
guard-disabled: 843, 271, 24, 24 guard-disabled: 843, 271, 24, 24
guard-active: 843, 296, 24, 24
deploy: 868, 246, 24, 24 deploy: 868, 246, 24, 24
deploy-disabled: 868, 271, 24, 24 deploy-disabled: 868, 271, 24, 24
deploy-active: 868, 296, 24, 24
scatter: 893, 246, 24, 24 scatter: 893, 246, 24, 24
scatter-disabled: 893, 271, 24, 24 scatter-disabled: 893, 271, 24, 24
scatter-active: 893, 296, 24, 24
stop: 918, 246, 24, 24 stop: 918, 246, 24, 24
stop-disabled: 918, 271, 24, 24 stop-disabled: 918, 271, 24, 24
stop-active: 918, 296, 24, 24
queue-orders: 943, 246, 24, 24 queue-orders: 943, 246, 24, 24
queue-orders-disabled: 943, 271, 24, 24 queue-orders-disabled: 943, 271, 24, 24
queue-orders-active: 943, 296, 24, 24
command-icons-highlighted:
Inherits: command-icons
Regions:
attack-move: 768, 296, 24, 24
force-move: 793, 296, 24, 24
force-attack: 818, 296, 24, 24
guard: 843, 296, 24, 24
deploy: 868, 296, 24, 24
scatter: 893, 296, 24, 24
stop: 918, 296, 24, 24
queue-orders: 943, 296, 24, 24
# #
# NOD chrome # NOD chrome

View File

@@ -183,21 +183,28 @@ command-icons:
queue-orders: 486, 196, 26, 26 queue-orders: 486, 196, 26, 26
queue-orders-disabled: 486, 222, 26, 26 queue-orders-disabled: 486, 222, 26, 26
command-icons-highlighted:
Inherits: command-icons
stance-icons: stance-icons:
Inherits: ^Chrome Inherits: ^Chrome
Regions: Regions:
attack-anything: 416, 248, 16, 16 attack-anything: 416, 248, 16, 16
attack-anything-disabled: 432, 248, 16, 16 attack-anything-disabled: 432, 248, 16, 16
attack-anything-active: 448, 248, 16, 16
defend: 464, 248, 16, 16 defend: 464, 248, 16, 16
defend-disabled: 480, 248, 16, 16 defend-disabled: 480, 248, 16, 16
defend-active: 496, 248, 16, 16
return-fire: 416, 264, 16, 16 return-fire: 416, 264, 16, 16
return-fire-disabled: 432, 264, 16, 16 return-fire-disabled: 432, 264, 16, 16
return-fire-active: 448, 264, 16, 16
hold-fire: 464, 264, 16, 16 hold-fire: 464, 264, 16, 16
hold-fire-disabled: 480, 264, 16, 16 hold-fire-disabled: 480, 264, 16, 16
hold-fire-active: 496, 264, 16, 16
stance-icons-highlighted:
Inherits: stance-icons
Regions:
attack-anything: 448, 248, 16, 16
defend: 496, 248, 16, 16
return-fire: 448, 264, 16, 16
hold-fire: 496, 264, 16, 16
flags: flags:
Inherits: ^Glyphs Inherits: ^Glyphs

View File

@@ -203,16 +203,20 @@ stance-icons:
Regions: Regions:
attack-anything: 0, 119, 16, 16 attack-anything: 0, 119, 16, 16
attack-anything-disabled: 0, 136, 16, 16 attack-anything-disabled: 0, 136, 16, 16
attack-anything-active: 0, 153, 16, 16
defend: 17, 119, 16, 16 defend: 17, 119, 16, 16
defend-disabled: 17, 136, 16, 16 defend-disabled: 17, 136, 16, 16
defend-active: 17, 153, 16, 16
return-fire: 34, 119, 16, 16 return-fire: 34, 119, 16, 16
return-fire-disabled: 34, 136, 16, 16 return-fire-disabled: 34, 136, 16, 16
return-fire-active: 34, 153, 16, 16
hold-fire: 51, 119, 16, 16 hold-fire: 51, 119, 16, 16
hold-fire-disabled: 51, 136, 16, 16 hold-fire-disabled: 51, 136, 16, 16
hold-fire-active: 51, 153, 16, 16
stance-icons-highlighted:
Inherits: stance-icons
Regions:
attack-anything: 0, 153, 16, 16
defend: 17, 153, 16, 16
return-fire: 34, 153, 16, 16
hold-fire: 51, 153, 16, 16
command-icons: command-icons:
Inherits: ^Glyphs Inherits: ^Glyphs
@@ -234,6 +238,9 @@ command-icons:
queue-orders: 175, 207, 24, 24 queue-orders: 175, 207, 24, 24
queue-orders-disabled: 175, 232, 24, 24 queue-orders-disabled: 175, 232, 24, 24
command-icons-highlighted:
Inherits: command-icons
sidebar-observer: sidebar-observer:
Inherits: ^Sidebar Inherits: ^Sidebar
Regions: Regions:

View File

@@ -177,68 +177,76 @@ command-icons-gdi:
Regions: Regions:
attack-move: 304, 331, 26, 26 attack-move: 304, 331, 26, 26
attack-move-disabled: 304, 357, 26, 26 attack-move-disabled: 304, 357, 26, 26
attack-move-active: 304, 383, 26, 26
attack-move-hover: 304, 409, 26, 26 attack-move-hover: 304, 409, 26, 26
attack-move-active-hover: 304, 435, 26, 26
force-move: 330, 331, 24, 24 force-move: 330, 331, 24, 24
force-move-disabled: 330, 357, 26, 26 force-move-disabled: 330, 357, 26, 26
force-move-active: 330, 383, 26, 26
force-move-hover: 330, 409, 26, 26 force-move-hover: 330, 409, 26, 26
force-move-active-hover: 330, 435, 26, 26
force-attack: 356, 331, 26, 26 force-attack: 356, 331, 26, 26
force-attack-disabled: 356, 357, 26, 26 force-attack-disabled: 356, 357, 26, 26
force-attack-active: 356, 383, 26, 26
force-attack-hover: 356, 409, 26, 26 force-attack-hover: 356, 409, 26, 26
force-attack-active-hover: 356, 435, 26, 26
guard: 382, 331, 24, 24 guard: 382, 331, 24, 24
guard-disabled: 382, 357, 26, 26 guard-disabled: 382, 357, 26, 26
guard-active: 382, 383, 26, 26
guard-hover: 382, 409, 26, 26 guard-hover: 382, 409, 26, 26
guard-active-hover: 382, 435, 26, 26
deploy: 408, 331, 24, 24 deploy: 408, 331, 24, 24
deploy-disabled: 408, 357, 26, 26 deploy-disabled: 408, 357, 26, 26
deploy-active: 408, 383, 26, 26
deploy-hover: 408, 409, 26, 26 deploy-hover: 408, 409, 26, 26
deploy-active-hover: 408, 435, 26, 26
scatter: 434, 331, 26, 26 scatter: 434, 331, 26, 26
scatter-disabled: 434, 357, 26, 26 scatter-disabled: 434, 357, 26, 26
scatter-active: 434, 383, 26, 26
scatter-hover: 434, 409, 26, 26 scatter-hover: 434, 409, 26, 26
scatter-active-hover: 434, 435, 26, 26
stop: 460, 331, 26, 26 stop: 460, 331, 26, 26
stop-disabled: 460, 357, 26, 26 stop-disabled: 460, 357, 26, 26
stop-active: 460, 383, 26, 26 stop-active: 460, 383, 26, 26
stop-hover: 460, 409, 26, 26
stop-active-hover: 460, 435, 26, 26
queue-orders: 486, 331, 26, 26 queue-orders: 486, 331, 26, 26
queue-orders-disabled: 486, 357, 26, 26 queue-orders-disabled: 486, 357, 26, 26
queue-orders-active: 486, 383, 26, 26
queue-orders-hover: 486, 409, 26, 26 queue-orders-hover: 486, 409, 26, 26
queue-orders-active-hover: 486, 435, 26, 26
command-icons-gdi-highlighted:
Inherits: command-icons-gdi
Regions:
attack-move: 304, 383, 26, 26
attack-move-hover: 304, 435, 26, 26
force-move: 330, 383, 26, 26
force-move-hover: 330, 435, 26, 26
force-attack: 356, 383, 26, 26
force-attack-hover: 356, 435, 26, 26
guard: 382, 383, 26, 26
guard-hover: 382, 435, 26, 26
deploy: 408, 383, 26, 26
deploy-hover: 408, 435, 26, 26
scatter: 434, 383, 26, 26
scatter-hover: 434, 435, 26, 26
stop: 460, 383, 26, 26
stop-hover: 460, 435, 26, 26
queue-orders: 486, 383, 26, 26
queue-orders-hover: 486, 435, 26, 26
stance-icons-gdi: stance-icons-gdi:
Inherits: ^Chrome Inherits: ^Chrome
Regions: Regions:
attack-anything: 424, 176, 22, 22 attack-anything: 424, 176, 22, 22
attack-anything-disabled: 424, 198, 22, 22 attack-anything-disabled: 424, 198, 22, 22
attack-anything-active: 424, 220, 22, 22
attack-anything-hover: 424, 242, 22, 22 attack-anything-hover: 424, 242, 22, 22
attack-anything-active-hover: 424, 264, 22, 22
defend: 446, 176, 22, 22 defend: 446, 176, 22, 22
defend-disabled: 446, 198, 22, 22 defend-disabled: 446, 198, 22, 22
defend-active: 446, 220, 22, 22
defend-hover: 446, 242, 22, 22 defend-hover: 446, 242, 22, 22
defend-active-hover: 446, 264, 22, 22
return-fire: 468, 176, 22, 22 return-fire: 468, 176, 22, 22
return-fire-disabled: 468, 198, 22, 22 return-fire-disabled: 468, 198, 22, 22
return-fire-active: 468, 220, 22, 22
return-fire-hover: 468, 242, 22, 22 return-fire-hover: 468, 242, 22, 22
return-fire-active-hover: 468, 264, 22, 22
hold-fire: 490, 176, 22, 22 hold-fire: 490, 176, 22, 22
hold-fire-disabled: 490, 198, 22, 22 hold-fire-disabled: 490, 198, 22, 22
hold-fire-active: 490, 220, 22, 22
hold-fire-hover: 490, 242, 22, 22 hold-fire-hover: 490, 242, 22, 22
hold-fire-active-hover: 490, 264, 22, 22
stance-icons-gdi-highlighted:
Inherits: stance-icons-gdi
Regions:
attack-anything: 424, 220, 22, 22
attack-anything-hover: 424, 264, 22, 22
defend: 446, 220, 22, 22
defend-hover: 446, 264, 22, 22
return-fire: 468, 220, 22, 22
return-fire-hover: 468, 264, 22, 22
hold-fire: 490, 220, 22, 22
hold-fire-hover: 490, 264, 22, 22
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# NOD # NOD
@@ -372,68 +380,76 @@ command-icons-nod:
Regions: Regions:
attack-move: 816, 331, 26, 26 attack-move: 816, 331, 26, 26
attack-move-disabled: 816, 357, 26, 26 attack-move-disabled: 816, 357, 26, 26
attack-move-active: 816, 383, 26, 26
attack-move-hover: 816, 409, 26, 26 attack-move-hover: 816, 409, 26, 26
attack-move-active-hover: 816, 435, 26, 26
force-move: 842, 331, 24, 24 force-move: 842, 331, 24, 24
force-move-disabled: 842, 357, 26, 26 force-move-disabled: 842, 357, 26, 26
force-move-active: 842, 383, 26, 26
force-move-hover: 842, 409, 26, 26 force-move-hover: 842, 409, 26, 26
force-move-active-hover: 842, 435, 26, 26
force-attack: 868, 331, 26, 26 force-attack: 868, 331, 26, 26
force-attack-disabled: 868, 357, 26, 26 force-attack-disabled: 868, 357, 26, 26
force-attack-active: 868, 383, 26, 26
force-attack-hover: 868, 409, 26, 26 force-attack-hover: 868, 409, 26, 26
force-attack-active-hover: 868, 435, 26, 26
guard: 894, 331, 24, 24 guard: 894, 331, 24, 24
guard-disabled: 894, 357, 26, 26 guard-disabled: 894, 357, 26, 26
guard-active: 894, 383, 26, 26
guard-hover: 894, 409, 26, 26 guard-hover: 894, 409, 26, 26
guard-active-hover: 894, 435, 26, 26
deploy: 920, 331, 24, 24 deploy: 920, 331, 24, 24
deploy-disabled: 920, 357, 26, 26 deploy-disabled: 920, 357, 26, 26
deploy-active: 920, 383, 26, 26
deploy-hover: 920, 409, 26, 26 deploy-hover: 920, 409, 26, 26
deploy-active-hover: 920, 435, 26, 26
scatter: 946, 331, 26, 26 scatter: 946, 331, 26, 26
scatter-disabled: 946, 357, 26, 26 scatter-disabled: 946, 357, 26, 26
scatter-active: 946, 383, 26, 26
scatter-hover: 946, 409, 26, 26 scatter-hover: 946, 409, 26, 26
scatter-active-hover: 946, 435, 26, 26
stop: 972, 331, 26, 26 stop: 972, 331, 26, 26
stop-disabled: 972, 357, 26, 26 stop-disabled: 972, 357, 26, 26
stop-active: 972, 383, 26, 26
stop-hover: 972, 409, 26, 26 stop-hover: 972, 409, 26, 26
stop-active-hover: 972, 435, 26, 26
queue-orders: 998, 331, 26, 26 queue-orders: 998, 331, 26, 26
queue-orders-disabled: 998, 357, 26, 26 queue-orders-disabled: 998, 357, 26, 26
queue-orders-active: 998, 383, 26, 26
queue-orders-hover: 998, 409, 26, 26 queue-orders-hover: 998, 409, 26, 26
queue-orders-active-hover: 998, 435, 26, 26
command-icons-nod-highlighted:
Inherits: command-icons-nod
Regions:
attack-move: 816, 383, 26, 26
attack-move-hover: 816, 435, 26, 26
force-move: 842, 383, 26, 26
force-move-hover: 842, 435, 26, 26
force-attack: 868, 383, 26, 26
force-attack-hover: 868, 435, 26, 26
guard: 894, 383, 26, 26
guard-hover: 894, 435, 26, 26
deploy: 920, 383, 26, 26
deploy-hover: 920, 435, 26, 26
scatter: 946, 383, 26, 26
scatter-hover: 946, 435, 26, 26
stop: 972, 383, 26, 26
stop-hover: 972, 435, 26, 26
queue-orders: 998, 383, 26, 26
queue-orders-hover: 998, 435, 26, 26
stance-icons-nod: stance-icons-nod:
Inherits: ^Chrome Inherits: ^Chrome
Regions: Regions:
attack-anything: 936, 176, 22, 22 attack-anything: 936, 176, 22, 22
attack-anything-disabled: 936, 198, 22, 22 attack-anything-disabled: 936, 198, 22, 22
attack-anything-active: 936, 220, 22, 22
attack-anything-hover: 936, 242, 22, 22 attack-anything-hover: 936, 242, 22, 22
attack-anything-active-hover: 936, 264, 22, 22
defend: 958, 176, 22, 22 defend: 958, 176, 22, 22
defend-disabled: 958, 198, 22, 22 defend-disabled: 958, 198, 22, 22
defend-active: 958, 220, 22, 22
defend-hover: 958, 242, 22, 22 defend-hover: 958, 242, 22, 22
defend-active-hover: 958, 264, 22, 22
return-fire: 980, 176, 22, 22 return-fire: 980, 176, 22, 22
return-fire-disabled: 980, 198, 22, 22 return-fire-disabled: 980, 198, 22, 22
return-fire-active: 980, 220, 22, 22
return-fire-hover: 980, 242, 22, 22 return-fire-hover: 980, 242, 22, 22
return-fire-active-hover: 980, 264, 22, 22
hold-fire: 1002, 176, 22, 22 hold-fire: 1002, 176, 22, 22
hold-fire-disabled: 1002, 198, 22, 22 hold-fire-disabled: 1002, 198, 22, 22
hold-fire-active: 1002, 220, 22, 22
hold-fire-hover: 1002, 242, 22, 22 hold-fire-hover: 1002, 242, 22, 22
hold-fire-active-hover: 1002, 264, 22, 22
stance-icons-nod-highlighted:
Inherits: stance-icons-nod
Regions:
attack-anything: 936, 220, 22, 22
attack-anything-hover: 936, 264, 22, 22
defend: 958, 220, 22, 22
defend-hover: 958, 264, 22, 22
return-fire: 980, 220, 22, 22
return-fire-hover: 980, 264, 22, 22
hold-fire: 1002, 220, 22, 22
hold-fire-hover: 1002, 264, 22, 22
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# GENERIC # GENERIC