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:
parent
f776ff3d8c
commit
c3069ad002
@ -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]
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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})";
|
||||||
|
Loading…
Reference in New Issue
Block a user