Use cached transforms for images in widgets

This commit is contained in:
Ivaylo Draganov
2020-11-21 21:33:57 +02:00
committed by Paul Chote
parent c8ab409d38
commit ad4425d11e
4 changed files with 35 additions and 15 deletions

View File

@@ -29,18 +29,26 @@ namespace OpenRA.Mods.Common.Widgets
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;
[ObjectCreator.UseCtor]
public DropDownButtonWidget(ModData modData)
: base(modData) { }
: base(modData)
{
getMarkerImage = WidgetUtils.GetCachedStatefulImage(Decorations, DecorationMarker);
getSeparatorImage = WidgetUtils.GetCachedStatefulImage(Separators, SeparatorImage);
}
protected DropDownButtonWidget(DropDownButtonWidget widget)
: base(widget)
{
PanelRoot = widget.PanelRoot;
getMarkerImage = WidgetUtils.GetCachedStatefulImage(Decorations, DecorationMarker);
getSeparatorImage = WidgetUtils.GetCachedStatefulImage(Separators, SeparatorImage);
}
public override void Draw()
@@ -52,14 +60,10 @@ namespace OpenRA.Mods.Common.Widgets
var isDisabled = IsDisabled();
var isHover = Ui.MouseOverWidget == this || Children.Any(c => c == Ui.MouseOverWidget);
var markerImageName = WidgetUtils.GetStatefulImageName(DecorationMarker, isDisabled, Depressed, isHover);
var arrowImage = ChromeProvider.GetImage(Decorations, markerImageName) ?? ChromeProvider.GetImage(Decorations, DecorationMarker);
var arrowImage = getMarkerImage.Update((isDisabled, Depressed, isHover, false));
WidgetUtils.DrawRGBA(arrowImage, stateOffset + new float2(rb.Right - (int)((rb.Height + arrowImage.Size.X) / 2), rb.Top + (int)((rb.Height - arrowImage.Size.Y) / 2)));
var separatorImageName = WidgetUtils.GetStatefulImageName(SeparatorImage, isDisabled, Depressed, isHover);
var separatorImage = ChromeProvider.GetImage(Separators, separatorImageName) ?? ChromeProvider.GetImage(Separators, SeparatorImage);
var separatorImage = getSeparatorImage.Update((isDisabled, Depressed, isHover, false));
if (separatorImage != null)
WidgetUtils.DrawRGBA(separatorImage, stateOffset + new float2(-3, 0) + new float2(rb.Right - rb.Height + 4, rb.Top + (int)((rb.Height - separatorImage.Size.Y) / 2)));
}