TooltipWidgetContainer, load tooltip ui only when visible.

This commit is contained in:
Vapre
2022-07-16 15:26:57 +02:00
committed by abcdefg30
parent 0e5f33ef93
commit 804bff1b0e

View File

@@ -28,20 +28,38 @@ namespace OpenRA.Mods.Common.Widgets
Widget tooltip; Widget tooltip;
int nextToken = 1; int nextToken = 1;
int currentToken; int currentToken;
string id;
WidgetArgs widgetArgs;
public TooltipContainerWidget() public TooltipContainerWidget()
{ {
graphicSettings = Game.Settings.Graphics; graphicSettings = Game.Settings.Graphics;
IsVisible = () => Game.RunTime > Viewport.LastMoveRunTime + TooltipDelayMilliseconds; IsVisible = () =>
{
// PERF: Only load widget once visible.
var visible = Game.RunTime > Viewport.LastMoveRunTime + TooltipDelayMilliseconds;
if (visible)
LoadWidget();
return visible;
};
}
void LoadWidget()
{
if (id == null || tooltip != null)
return;
tooltip = Ui.LoadWidget(id, this, new WidgetArgs(widgetArgs) { { "tooltipContainer", this } });
} }
public int SetTooltip(string id, WidgetArgs args) public int SetTooltip(string id, WidgetArgs args)
{ {
RemoveTooltip(); RemoveTooltip();
currentToken = nextToken++; currentToken = nextToken++;
tooltip = null;
tooltip = Ui.LoadWidget(id, this, new WidgetArgs(args) { { "tooltipContainer", this } }); this.id = id;
widgetArgs = args;
return currentToken; return currentToken;
} }
@@ -50,6 +68,10 @@ namespace OpenRA.Mods.Common.Widgets
if (currentToken != token) if (currentToken != token)
return; return;
tooltip = null;
id = null;
widgetArgs = null;
RemoveChildren(); RemoveChildren();
BeforeRender = Nothing; BeforeRender = Nothing;
} }
@@ -59,7 +81,10 @@ namespace OpenRA.Mods.Common.Widgets
RemoveTooltip(currentToken); RemoveTooltip(currentToken);
} }
public override void Draw() { BeforeRender(); } public override void Draw()
{
BeforeRender();
}
public override bool EventBoundsContains(int2 location) { return false; } public override bool EventBoundsContains(int2 location) { return false; }