Only update key binding on next usage to avoid large blocking calls

This commit is contained in:
Dean Herbert 2020-08-06 18:22:17 +09:00
parent f9c369b23c
commit 9685df0eca
1 changed files with 14 additions and 7 deletions

View File

@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Allocation;
using osu.Framework.Caching;
using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
@ -76,7 +77,7 @@ public string TooltipSub
protected FillFlowContainer Flow;
[Resolved]
private KeyBindingStore store { get; set; }
private KeyBindingStore keyBindings { get; set; }
protected ToolbarButton()
: base(HoverSampleSet.Loud)
@ -159,21 +160,25 @@ protected ToolbarButton()
};
}
private readonly Cached tooltipKeyBinding = new Cached();
[BackgroundDependencyLoader]
private void load()
{
updateTooltip();
store.KeyBindingChanged += updateTooltip;
keyBindings.KeyBindingChanged += () => tooltipKeyBinding.Invalidate();
updateKeyBindingTooltip();
}
private void updateTooltip()
private void updateKeyBindingTooltip()
{
var binding = store.Query().Find(b => (GlobalAction)b.Action == Hotkey);
if (tooltipKeyBinding.IsValid)
return;
var binding = keyBindings.Query().Find(b => (GlobalAction)b.Action == Hotkey);
var keyBindingString = binding?.KeyCombination.ReadableString();
keyBindingTooltip.Text = !string.IsNullOrEmpty(keyBindingString) ? $" ({keyBindingString})" : string.Empty;
tooltipKeyBinding.Validate();
}
protected override bool OnMouseDown(MouseDownEvent e) => true;
@ -187,6 +192,8 @@ protected override bool OnClick(ClickEvent e)
protected override bool OnHover(HoverEvent e)
{
updateKeyBindingTooltip();
HoverBackground.FadeIn(200);
tooltipContainer.FadeIn(100);
return base.OnHover(e);