Fix DropDownButtonWidget ignoring yaml separator overrides.

This commit is contained in:
Paul Chote
2021-08-26 23:49:22 +01:00
committed by abcdefg30
parent e389c00a11
commit c7700a8a2b

View File

@@ -25,30 +25,26 @@ namespace OpenRA.Mods.Common.Widgets
public readonly string Separators = "dropdown-separators"; public readonly string Separators = "dropdown-separators";
public readonly string SeparatorImage = "separator"; public readonly string SeparatorImage = "separator";
public readonly TextAlign PanelAlign = TextAlign.Left; public readonly TextAlign PanelAlign = TextAlign.Left;
public string PanelRoot;
Widget panel; Widget panel;
MaskWidget fullscreenMask; MaskWidget fullscreenMask;
Widget panelRoot; Widget panelRoot;
readonly CachedTransform<(bool Disabled, bool Pressed, bool Hover, bool Focused), Sprite> getMarkerImage; CachedTransform<(bool Disabled, bool Pressed, bool Hover, bool Focused), Sprite> getMarkerImage;
readonly CachedTransform<(bool Disabled, bool Pressed, bool Hover, bool Focused), Sprite> getSeparatorImage; CachedTransform<(bool Disabled, bool Pressed, bool Hover, bool Focused), Sprite> getSeparatorImage;
public string PanelRoot;
public string SelectedItem;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public DropDownButtonWidget(ModData modData) public DropDownButtonWidget(ModData modData)
: base(modData) : base(modData) { }
{
getMarkerImage = WidgetUtils.GetCachedStatefulImage(Decorations, DecorationMarker);
getSeparatorImage = WidgetUtils.GetCachedStatefulImage(Separators, SeparatorImage);
}
protected DropDownButtonWidget(DropDownButtonWidget widget) protected DropDownButtonWidget(DropDownButtonWidget widget)
: base(widget) : base(widget)
{ {
PanelRoot = widget.PanelRoot; PanelRoot = widget.PanelRoot;
getMarkerImage = WidgetUtils.GetCachedStatefulImage(Decorations, DecorationMarker); Decorations = widget.Decorations;
getSeparatorImage = WidgetUtils.GetCachedStatefulImage(Separators, SeparatorImage); DecorationMarker = widget.DecorationMarker;
Separators = widget.Separators;
SeparatorImage = widget.SeparatorImage;
} }
public override void Draw() public override void Draw()
@@ -60,9 +56,15 @@ namespace OpenRA.Mods.Common.Widgets
var isDisabled = IsDisabled(); var isDisabled = IsDisabled();
var isHover = Ui.MouseOverWidget == this || Children.Any(c => c == Ui.MouseOverWidget); 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)); 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))); 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)); var separatorImage = getSeparatorImage.Update((isDisabled, Depressed, isHover, false));
if (separatorImage != null) 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))); WidgetUtils.DrawSprite(separatorImage, stateOffset + new float2(-3, 0) + new float2(rb.Right - rb.Height + 4, rb.Top + (int)((rb.Height - separatorImage.Size.Y) / 2)));