1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-12 18:23:04 +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.Linq;
using NUnit.Framework;
using osu.Framework.Input;
using osu.Framework.Input.Bindings;
using osu.Framework.Platform;
using osu.Game.Database;
@ -33,7 +34,7 @@ namespace osu.Game.Tests.Database
storage = new NativeStorage(directory.FullName);
realmContextFactory = new RealmContextFactory(storage, "test");
keyBindingStore = new RealmKeyBindingStore(realmContextFactory);
keyBindingStore = new RealmKeyBindingStore(realmContextFactory, new ReadableKeyCombinationProvider());
}
[Test]

View File

@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.Linq;
using osu.Framework.Input;
using osu.Framework.Input.Bindings;
using osu.Game.Database;
using osu.Game.Input.Bindings;
@ -16,10 +17,12 @@ namespace osu.Game.Input
public class RealmKeyBindingStore
{
private readonly RealmContextFactory realmFactory;
private readonly ReadableKeyCombinationProvider readableKeyCombinationProvider;
public RealmKeyBindingStore(RealmContextFactory realmFactory)
public RealmKeyBindingStore(RealmContextFactory realmFactory, ReadableKeyCombinationProvider readableKeyCombinationProvider)
{
this.realmFactory = realmFactory;
this.readableKeyCombinationProvider = readableKeyCombinationProvider;
}
/// <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))
{
string str = action.KeyCombination.ReadableString();
string str = readableKeyCombinationProvider.GetReadableString(action.KeyCombination);
// even if found, the readable string may be empty for an unbound action.
if (str.Length > 0)

View File

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

View File

@ -12,6 +12,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Effects;
using osu.Framework.Graphics.Shapes;
using osu.Framework.Input;
using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
using osu.Game.Database;
@ -57,13 +58,16 @@ namespace osu.Game.Overlays.Settings.Sections.Input
public bool FilteringActive { get; set; }
[Resolved]
private ReadableKeyCombinationProvider readableKeyCombinationProvider { get; set; }
private OsuSpriteText text;
private FillFlowContainer cancelAndClearButtons;
private FillFlowContainer<KeyButton> buttons;
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)
{
@ -422,6 +426,9 @@ namespace osu.Game.Overlays.Settings.Sections.Input
[Resolved]
private OverlayColourProvider colourProvider { get; set; }
[Resolved]
private ReadableKeyCombinationProvider readableKeyCombinationProvider { get; set; }
private bool isBinding;
public bool IsBinding
@ -470,12 +477,19 @@ namespace osu.Game.Overlays.Settings.Sections.Input
Margin = new MarginPadding(5),
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Text = keyBinding.KeyCombination.ReadableString(),
},
new HoverSounds()
};
}
protected override void LoadComplete()
{
base.LoadComplete();
readableKeyCombinationProvider.KeymapChanged += updateKeyCombinationText;
updateKeyCombinationText();
}
[BackgroundDependencyLoader]
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)
{
if (KeyBinding.RulesetID != null && !RealmKeyBindingStore.CheckValidForGameplay(newCombination))
return;
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.Sprites;
using osu.Framework.Graphics.Textures;
using osu.Framework.Input;
using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
using osu.Game.Database;
@ -39,6 +40,9 @@ namespace osu.Game.Overlays.Toolbar
[Resolved]
private TextureStore textures { get; set; }
[Resolved]
private ReadableKeyCombinationProvider readableKeyCombinationProvider { get; set; }
public void SetIcon(string texture) =>
SetIcon(new Sprite
{
@ -207,7 +211,7 @@ namespace osu.Game.Overlays.Toolbar
if (realmKeyBinding != null)
{
string keyBindingString = realmKeyBinding.KeyCombination.ReadableString();
string keyBindingString = readableKeyCombinationProvider.GetReadableString(realmKeyBinding.KeyCombination);
if (!string.IsNullOrEmpty(keyBindingString))
keyBindingTooltip.Text = $" ({keyBindingString})";