diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs
index e816fd50f3..fb585e9cbd 100644
--- a/osu.Game/Configuration/OsuConfigManager.cs
+++ b/osu.Game/Configuration/OsuConfigManager.cs
@@ -91,6 +91,7 @@ namespace osu.Game.Configuration
// Input
SetDefault(OsuSetting.MenuCursorSize, 1.0f, 0.5f, 2f, 0.01f);
SetDefault(OsuSetting.GameplayCursorSize, 1.0f, 0.1f, 2f, 0.01f);
+ SetDefault(OsuSetting.GameplayCursorDuringTouch, false);
SetDefault(OsuSetting.AutoCursorSize, false);
SetDefault(OsuSetting.MouseDisableButtons, false);
@@ -292,6 +293,7 @@ namespace osu.Game.Configuration
MenuCursorSize,
GameplayCursorSize,
AutoCursorSize,
+ GameplayCursorDuringTouch,
DimLevel,
BlurLevel,
LightenDuringBreaks,
diff --git a/osu.Game/Graphics/Cursor/MenuCursorContainer.cs b/osu.Game/Graphics/Cursor/MenuCursorContainer.cs
index 746f1b5d5e..e03dc4df6f 100644
--- a/osu.Game/Graphics/Cursor/MenuCursorContainer.cs
+++ b/osu.Game/Graphics/Cursor/MenuCursorContainer.cs
@@ -3,16 +3,20 @@
#nullable disable
+using osu.Framework.Allocation;
+using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Cursor;
using osu.Framework.Input;
using osu.Framework.Input.StateChanges;
+using osu.Game.Configuration;
namespace osu.Game.Graphics.Cursor
{
///
- /// A container which provides a which can be overridden by hovered s.
+ /// A container which provides a .
+ /// It also handles cases where a more localised cursor is provided by another component (via ).
///
public class MenuCursorContainer : Container, IProvideCursor
{
@@ -36,12 +40,19 @@ namespace osu.Game.Graphics.Cursor
});
}
+ private Bindable showDuringTouch;
+
private InputManager inputManager;
+ [Resolved]
+ private OsuConfigManager config { get; set; }
+
protected override void LoadComplete()
{
base.LoadComplete();
inputManager = GetContainingInputManager();
+
+ showDuringTouch = config.GetBindable(OsuSetting.GameplayCursorDuringTouch);
}
private IProvideCursor currentTarget;
@@ -51,7 +62,7 @@ namespace osu.Game.Graphics.Cursor
base.Update();
var lastMouseSource = inputManager.CurrentState.Mouse.LastSource;
- bool hasValidInput = lastMouseSource != null && !(lastMouseSource is ISourcedFromTouch);
+ bool hasValidInput = lastMouseSource != null && (showDuringTouch.Value || lastMouseSource is not ISourcedFromTouch);
if (!hasValidInput || !CanShowCursor)
{
diff --git a/osu.Game/Localisation/SkinSettingsStrings.cs b/osu.Game/Localisation/SkinSettingsStrings.cs
index 81035c5a5e..4b6b0ce1d6 100644
--- a/osu.Game/Localisation/SkinSettingsStrings.cs
+++ b/osu.Game/Localisation/SkinSettingsStrings.cs
@@ -34,6 +34,11 @@ namespace osu.Game.Localisation
///
public static LocalisableString AutoCursorSize => new TranslatableString(getKey(@"auto_cursor_size"), @"Adjust gameplay cursor size based on current beatmap");
+ ///
+ /// "Show gameplay cursor during touch input"
+ ///
+ public static LocalisableString GameplayCursorDuringTouch => new TranslatableString(getKey(@"gameplay_cursor_during_touch"), @"Show gameplay cursor during touch input");
+
///
/// "Beatmap skins"
///
diff --git a/osu.Game/Overlays/Settings/Sections/Gameplay/InputSettings.cs b/osu.Game/Overlays/Settings/Sections/Gameplay/InputSettings.cs
index b5315d5268..ac59a6c0ed 100644
--- a/osu.Game/Overlays/Settings/Sections/Gameplay/InputSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/Gameplay/InputSettings.cs
@@ -32,6 +32,11 @@ namespace osu.Game.Overlays.Settings.Sections.Gameplay
LabelText = SkinSettingsStrings.AutoCursorSize,
Current = config.GetBindable(OsuSetting.AutoCursorSize)
},
+ new SettingsCheckbox
+ {
+ LabelText = SkinSettingsStrings.GameplayCursorDuringTouch,
+ Current = config.GetBindable(OsuSetting.GameplayCursorDuringTouch)
+ },
};
if (RuntimeInfo.OS == RuntimeInfo.Platform.Windows)