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