From c7700a8a2b9d1b918d3b35af2c3be2ee9bc90bc5 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 26 Aug 2021 23:49:22 +0100 Subject: [PATCH] Fix DropDownButtonWidget ignoring yaml separator overrides. --- .../Widgets/DropDownButtonWidget.cs | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/OpenRA.Mods.Common/Widgets/DropDownButtonWidget.cs b/OpenRA.Mods.Common/Widgets/DropDownButtonWidget.cs index 2fc2e00219..a28f92af81 100644 --- a/OpenRA.Mods.Common/Widgets/DropDownButtonWidget.cs +++ b/OpenRA.Mods.Common/Widgets/DropDownButtonWidget.cs @@ -25,30 +25,26 @@ namespace OpenRA.Mods.Common.Widgets public readonly string Separators = "dropdown-separators"; public readonly string SeparatorImage = "separator"; public readonly TextAlign PanelAlign = TextAlign.Left; + public string PanelRoot; Widget panel; MaskWidget fullscreenMask; Widget panelRoot; - readonly CachedTransform<(bool Disabled, bool Pressed, bool Hover, bool Focused), Sprite> getMarkerImage; - readonly CachedTransform<(bool Disabled, bool Pressed, bool Hover, bool Focused), Sprite> getSeparatorImage; - - public string PanelRoot; - public string SelectedItem; + CachedTransform<(bool Disabled, bool Pressed, bool Hover, bool Focused), Sprite> getMarkerImage; + CachedTransform<(bool Disabled, bool Pressed, bool Hover, bool Focused), Sprite> getSeparatorImage; [ObjectCreator.UseCtor] public DropDownButtonWidget(ModData modData) - : base(modData) - { - getMarkerImage = WidgetUtils.GetCachedStatefulImage(Decorations, DecorationMarker); - getSeparatorImage = WidgetUtils.GetCachedStatefulImage(Separators, SeparatorImage); - } + : base(modData) { } protected DropDownButtonWidget(DropDownButtonWidget widget) : base(widget) { PanelRoot = widget.PanelRoot; - getMarkerImage = WidgetUtils.GetCachedStatefulImage(Decorations, DecorationMarker); - getSeparatorImage = WidgetUtils.GetCachedStatefulImage(Separators, SeparatorImage); + Decorations = widget.Decorations; + DecorationMarker = widget.DecorationMarker; + Separators = widget.Separators; + SeparatorImage = widget.SeparatorImage; } public override void Draw() @@ -60,9 +56,15 @@ namespace OpenRA.Mods.Common.Widgets var isDisabled = IsDisabled(); var isHover = Ui.MouseOverWidget == this || Children.Any(c => c == Ui.MouseOverWidget); + if (getMarkerImage == null) + getMarkerImage = WidgetUtils.GetCachedStatefulImage(Decorations, DecorationMarker); + var arrowImage = getMarkerImage.Update((isDisabled, Depressed, isHover, false)); WidgetUtils.DrawSprite(arrowImage, stateOffset + new float2(rb.Right - (int)((rb.Height + arrowImage.Size.X) / 2), rb.Top + (int)((rb.Height - arrowImage.Size.Y) / 2))); + if (getSeparatorImage == null) + getSeparatorImage = WidgetUtils.GetCachedStatefulImage(Separators, SeparatorImage); + var separatorImage = getSeparatorImage.Update((isDisabled, Depressed, isHover, false)); if (separatorImage != null) WidgetUtils.DrawSprite(separatorImage, stateOffset + new float2(-3, 0) + new float2(rb.Right - rb.Height + 4, rb.Top + (int)((rb.Height - separatorImage.Size.Y) / 2)));