1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-26 18:52:55 +08:00

Change to use ReadableKeyCombinationProvider

Changes all usages of `KeyCombination.ReadableString()` to
`ReadableKeyCombinationProvider.GetReadableString()`.

Subscribing to `KeymapChanged` is only required in `KeyButton`.
All other places query `GetReadableString()` every time.
This commit is contained in:
Susko3 2021-11-08 06:55:26 +01:00
parent f776ff3d8c
commit c3069ad002
5 changed files with 43 additions and 9 deletions

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.Input;
using osu.Framework.Input.Bindings; using osu.Framework.Input.Bindings;
using osu.Framework.Platform; using osu.Framework.Platform;
using osu.Game.Database; using osu.Game.Database;
@ -33,7 +34,7 @@ namespace osu.Game.Tests.Database
storage = new NativeStorage(directory.FullName); storage = new NativeStorage(directory.FullName);
realmContextFactory = new RealmContextFactory(storage, "test"); realmContextFactory = new RealmContextFactory(storage, "test");
keyBindingStore = new RealmKeyBindingStore(realmContextFactory); keyBindingStore = new RealmKeyBindingStore(realmContextFactory, new ReadableKeyCombinationProvider());
} }
[Test] [Test]

View File

@ -3,6 +3,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using osu.Framework.Input;
using osu.Framework.Input.Bindings; using osu.Framework.Input.Bindings;
using osu.Game.Database; using osu.Game.Database;
using osu.Game.Input.Bindings; using osu.Game.Input.Bindings;
@ -16,10 +17,12 @@ namespace osu.Game.Input
public class RealmKeyBindingStore public class RealmKeyBindingStore
{ {
private readonly RealmContextFactory realmFactory; private readonly RealmContextFactory realmFactory;
private readonly ReadableKeyCombinationProvider readableKeyCombinationProvider;
public RealmKeyBindingStore(RealmContextFactory realmFactory) public RealmKeyBindingStore(RealmContextFactory realmFactory, ReadableKeyCombinationProvider readableKeyCombinationProvider)
{ {
this.realmFactory = realmFactory; this.realmFactory = realmFactory;
this.readableKeyCombinationProvider = readableKeyCombinationProvider;
} }
/// <summary> /// <summary>
@ -35,7 +38,7 @@ namespace osu.Game.Input
{ {
foreach (var action in context.All<RealmKeyBinding>().Where(b => b.RulesetID == null && (GlobalAction)b.ActionInt == globalAction)) foreach (var action in context.All<RealmKeyBinding>().Where(b => b.RulesetID == null && (GlobalAction)b.ActionInt == globalAction))
{ {
string str = action.KeyCombination.ReadableString(); string str = readableKeyCombinationProvider.GetReadableString(action.KeyCombination);
// even if found, the readable string may be empty for an unbound action. // even if found, the readable string may be empty for an unbound action.
if (str.Length > 0) if (str.Length > 0)

View File

@ -167,7 +167,7 @@ namespace osu.Game
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load() private void load(ReadableKeyCombinationProvider readableKeyCombinationProvider)
{ {
try try
{ {
@ -316,7 +316,7 @@ namespace osu.Game
base.Content.Add(CreateScalingContainer().WithChildren(mainContent)); base.Content.Add(CreateScalingContainer().WithChildren(mainContent));
KeyBindingStore = new RealmKeyBindingStore(realmFactory); KeyBindingStore = new RealmKeyBindingStore(realmFactory, readableKeyCombinationProvider);
KeyBindingStore.Register(globalBindings, RulesetStore.AvailableRulesets); KeyBindingStore.Register(globalBindings, RulesetStore.AvailableRulesets);
dependencies.Cache(globalBindings); dependencies.Cache(globalBindings);

View File

@ -12,6 +12,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Effects; using osu.Framework.Graphics.Effects;
using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Shapes;
using osu.Framework.Input;
using osu.Framework.Input.Bindings; using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events; using osu.Framework.Input.Events;
using osu.Game.Database; using osu.Game.Database;
@ -57,13 +58,16 @@ namespace osu.Game.Overlays.Settings.Sections.Input
public bool FilteringActive { get; set; } public bool FilteringActive { get; set; }
[Resolved]
private ReadableKeyCombinationProvider readableKeyCombinationProvider { get; set; }
private OsuSpriteText text; private OsuSpriteText text;
private FillFlowContainer cancelAndClearButtons; private FillFlowContainer cancelAndClearButtons;
private FillFlowContainer<KeyButton> buttons; private FillFlowContainer<KeyButton> buttons;
private Bindable<bool> isDefault { get; } = new BindableBool(true); private Bindable<bool> isDefault { get; } = new BindableBool(true);
public IEnumerable<string> FilterTerms => bindings.Select(b => b.KeyCombination.ReadableString()).Prepend(text.Text.ToString()); public IEnumerable<string> FilterTerms => bindings.Select(b => readableKeyCombinationProvider.GetReadableString(b.KeyCombination)).Prepend(text.Text.ToString());
public KeyBindingRow(object action, List<RealmKeyBinding> bindings) public KeyBindingRow(object action, List<RealmKeyBinding> bindings)
{ {
@ -422,6 +426,9 @@ namespace osu.Game.Overlays.Settings.Sections.Input
[Resolved] [Resolved]
private OverlayColourProvider colourProvider { get; set; } private OverlayColourProvider colourProvider { get; set; }
[Resolved]
private ReadableKeyCombinationProvider readableKeyCombinationProvider { get; set; }
private bool isBinding; private bool isBinding;
public bool IsBinding public bool IsBinding
@ -470,12 +477,19 @@ namespace osu.Game.Overlays.Settings.Sections.Input
Margin = new MarginPadding(5), Margin = new MarginPadding(5),
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Text = keyBinding.KeyCombination.ReadableString(),
}, },
new HoverSounds() new HoverSounds()
}; };
} }
protected override void LoadComplete()
{
base.LoadComplete();
readableKeyCombinationProvider.KeymapChanged += updateKeyCombinationText;
updateKeyCombinationText();
}
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load() private void load()
{ {
@ -508,13 +522,25 @@ namespace osu.Game.Overlays.Settings.Sections.Input
} }
} }
private void updateKeyCombinationText()
{
Text.Text = readableKeyCombinationProvider.GetReadableString(KeyBinding.KeyCombination);
}
public void UpdateKeyCombination(KeyCombination newCombination) public void UpdateKeyCombination(KeyCombination newCombination)
{ {
if (KeyBinding.RulesetID != null && !RealmKeyBindingStore.CheckValidForGameplay(newCombination)) if (KeyBinding.RulesetID != null && !RealmKeyBindingStore.CheckValidForGameplay(newCombination))
return; return;
KeyBinding.KeyCombination = newCombination; KeyBinding.KeyCombination = newCombination;
Text.Text = KeyBinding.KeyCombination.ReadableString(); updateKeyCombinationText();
}
protected override void Dispose(bool isDisposing)
{
base.Dispose(isDisposing);
readableKeyCombinationProvider.KeymapChanged -= updateKeyCombinationText;
} }
} }
} }

View File

@ -11,6 +11,7 @@ using osu.Framework.Graphics.Effects;
using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.Input;
using osu.Framework.Input.Bindings; using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events; using osu.Framework.Input.Events;
using osu.Game.Database; using osu.Game.Database;
@ -39,6 +40,9 @@ namespace osu.Game.Overlays.Toolbar
[Resolved] [Resolved]
private TextureStore textures { get; set; } private TextureStore textures { get; set; }
[Resolved]
private ReadableKeyCombinationProvider readableKeyCombinationProvider { get; set; }
public void SetIcon(string texture) => public void SetIcon(string texture) =>
SetIcon(new Sprite SetIcon(new Sprite
{ {
@ -207,7 +211,7 @@ namespace osu.Game.Overlays.Toolbar
if (realmKeyBinding != null) if (realmKeyBinding != null)
{ {
string keyBindingString = realmKeyBinding.KeyCombination.ReadableString(); string keyBindingString = readableKeyCombinationProvider.GetReadableString(realmKeyBinding.KeyCombination);
if (!string.IsNullOrEmpty(keyBindingString)) if (!string.IsNullOrEmpty(keyBindingString))
keyBindingTooltip.Text = $" ({keyBindingString})"; keyBindingTooltip.Text = $" ({keyBindingString})";