TooltipWidgetContainer, load tooltip ui only when visible.
This commit is contained in:
@@ -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; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user