diff --git a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs
index 98b8e3c5d6..fc06780431 100644
--- a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs
@@ -118,6 +118,7 @@ namespace osu.Game.Tests.Visual.SongSelect
InputManager.ReleaseKey(Key.Enter);
});
+ AddUntilStep("wait for not current", () => !songSelect.IsCurrentScreen());
AddAssert("ensure selection changed", () => selected != Beatmap.Value);
AddUntilStep("wait for return to song select", () => songSelect.IsCurrentScreen());
@@ -145,6 +146,7 @@ namespace osu.Game.Tests.Visual.SongSelect
InputManager.ReleaseKey(Key.Down);
});
+ AddUntilStep("wait for not current", () => !songSelect.IsCurrentScreen());
AddAssert("ensure selection didn't change", () => selected == Beatmap.Value);
AddUntilStep("wait for return to song select", () => songSelect.IsCurrentScreen());
@@ -176,6 +178,7 @@ namespace osu.Game.Tests.Visual.SongSelect
InputManager.ReleaseKey(Key.Enter);
});
+ AddUntilStep("wait for not current", () => !songSelect.IsCurrentScreen());
AddAssert("ensure selection changed", () => selected != Beatmap.Value);
AddUntilStep("wait for return to song select", () => songSelect.IsCurrentScreen());
@@ -208,6 +211,7 @@ namespace osu.Game.Tests.Visual.SongSelect
InputManager.ReleaseButton(MouseButton.Left);
});
+ AddUntilStep("wait for not current", () => !songSelect.IsCurrentScreen());
AddAssert("ensure selection didn't change", () => selected == Beatmap.Value);
AddUntilStep("wait for return to song select", () => songSelect.IsCurrentScreen());
diff --git a/osu.Game/Graphics/UserInterface/OsuSliderBar.cs b/osu.Game/Graphics/UserInterface/OsuSliderBar.cs
index 2112aac6a3..5c6c7aeafd 100644
--- a/osu.Game/Graphics/UserInterface/OsuSliderBar.cs
+++ b/osu.Game/Graphics/UserInterface/OsuSliderBar.cs
@@ -36,6 +36,11 @@ namespace osu.Game.Graphics.UserInterface
public virtual string TooltipText { get; private set; }
+ ///
+ /// Whether to format the tooltip as a percentage or the actual value.
+ ///
+ public bool DisplayAsPercentage { get; set; }
+
private Color4 accentColour;
public Color4 AccentColour
@@ -169,11 +174,11 @@ namespace osu.Game.Graphics.UserInterface
else
{
double floatValue = value.ToDouble(NumberFormatInfo.InvariantInfo);
- double floatMinValue = CurrentNumber.MinValue.ToDouble(NumberFormatInfo.InvariantInfo);
- double floatMaxValue = CurrentNumber.MaxValue.ToDouble(NumberFormatInfo.InvariantInfo);
- if (floatMaxValue == 1 && floatMinValue >= -1)
+ if (DisplayAsPercentage)
+ {
TooltipText = floatValue.ToString("P0");
+ }
else
{
var decimalPrecision = normalise(CurrentNumber.Precision.ToDecimal(NumberFormatInfo.InvariantInfo), max_decimal_digits);
diff --git a/osu.Game/Overlays/Settings/Sections/Audio/VolumeSettings.cs b/osu.Game/Overlays/Settings/Sections/Audio/VolumeSettings.cs
index 0124f7090e..bda677ecd6 100644
--- a/osu.Game/Overlays/Settings/Sections/Audio/VolumeSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/Audio/VolumeSettings.cs
@@ -17,10 +17,34 @@ namespace osu.Game.Overlays.Settings.Sections.Audio
{
Children = new Drawable[]
{
- new SettingsSlider { LabelText = "Master", Bindable = audio.Volume, KeyboardStep = 0.01f },
- new SettingsSlider { LabelText = "Master (window inactive)", Bindable = config.GetBindable(OsuSetting.VolumeInactive), KeyboardStep = 0.01f },
- new SettingsSlider { LabelText = "Effect", Bindable = audio.VolumeSample, KeyboardStep = 0.01f },
- new SettingsSlider { LabelText = "Music", Bindable = audio.VolumeTrack, KeyboardStep = 0.01f },
+ new SettingsSlider
+ {
+ LabelText = "Master",
+ Bindable = audio.Volume,
+ KeyboardStep = 0.01f,
+ DisplayAsPercentage = true
+ },
+ new SettingsSlider
+ {
+ LabelText = "Master (window inactive)",
+ Bindable = config.GetBindable(OsuSetting.VolumeInactive),
+ KeyboardStep = 0.01f,
+ DisplayAsPercentage = true
+ },
+ new SettingsSlider
+ {
+ LabelText = "Effect",
+ Bindable = audio.VolumeSample,
+ KeyboardStep = 0.01f,
+ DisplayAsPercentage = true
+ },
+ new SettingsSlider
+ {
+ LabelText = "Music",
+ Bindable = audio.VolumeTrack,
+ KeyboardStep = 0.01f,
+ DisplayAsPercentage = true
+ },
};
}
}
diff --git a/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs
index 08bc67e43e..2d2cd42213 100644
--- a/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs
@@ -21,13 +21,15 @@ namespace osu.Game.Overlays.Settings.Sections.Gameplay
{
LabelText = "Background dim",
Bindable = config.GetBindable(OsuSetting.DimLevel),
- KeyboardStep = 0.01f
+ KeyboardStep = 0.01f,
+ DisplayAsPercentage = true
},
new SettingsSlider
{
LabelText = "Background blur",
Bindable = config.GetBindable(OsuSetting.BlurLevel),
- KeyboardStep = 0.01f
+ KeyboardStep = 0.01f,
+ DisplayAsPercentage = true
},
new SettingsCheckbox
{
diff --git a/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs b/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs
index 02b9edd975..efbb08b7df 100644
--- a/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs
@@ -98,25 +98,29 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
{
LabelText = "Horizontal position",
Bindable = scalingPositionX,
- KeyboardStep = 0.01f
+ KeyboardStep = 0.01f,
+ DisplayAsPercentage = true
},
new SettingsSlider
{
LabelText = "Vertical position",
Bindable = scalingPositionY,
- KeyboardStep = 0.01f
+ KeyboardStep = 0.01f,
+ DisplayAsPercentage = true
},
new SettingsSlider
{
LabelText = "Horizontal scale",
Bindable = scalingSizeX,
- KeyboardStep = 0.01f
+ KeyboardStep = 0.01f,
+ DisplayAsPercentage = true
},
new SettingsSlider
{
LabelText = "Vertical scale",
Bindable = scalingSizeY,
- KeyboardStep = 0.01f
+ KeyboardStep = 0.01f,
+ DisplayAsPercentage = true
},
}
},
diff --git a/osu.Game/Overlays/Settings/SettingsSlider.cs b/osu.Game/Overlays/Settings/SettingsSlider.cs
index 96c0279a7b..9fc3379b94 100644
--- a/osu.Game/Overlays/Settings/SettingsSlider.cs
+++ b/osu.Game/Overlays/Settings/SettingsSlider.cs
@@ -3,6 +3,7 @@
using System;
using osu.Framework.Graphics;
+using osu.Framework.Graphics.UserInterface;
using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Settings
@@ -22,16 +23,32 @@ namespace osu.Game.Overlays.Settings
RelativeSizeAxes = Axes.X
};
+ ///
+ /// When set, value changes based on user input are only transferred to any bound control's Current on commit.
+ /// This is useful if the UI interaction could be adversely affected by the value changing, such as the position of the on the screen.
+ ///
public bool TransferValueOnCommit
{
get => ((TSlider)Control).TransferValueOnCommit;
set => ((TSlider)Control).TransferValueOnCommit = value;
}
+ ///
+ /// A custom step value for each key press which actuates a change on this control.
+ ///
public float KeyboardStep
{
get => ((TSlider)Control).KeyboardStep;
set => ((TSlider)Control).KeyboardStep = value;
}
+
+ ///
+ /// Whether to format the tooltip as a percentage or the actual value.
+ ///
+ public bool DisplayAsPercentage
+ {
+ get => ((TSlider)Control).DisplayAsPercentage;
+ set => ((TSlider)Control).DisplayAsPercentage = value;
+ }
}
}
diff --git a/osu.Game/Screens/Play/PlayerSettings/VisualSettings.cs b/osu.Game/Screens/Play/PlayerSettings/VisualSettings.cs
index ff64f35a18..9db3a587fa 100644
--- a/osu.Game/Screens/Play/PlayerSettings/VisualSettings.cs
+++ b/osu.Game/Screens/Play/PlayerSettings/VisualSettings.cs
@@ -27,12 +27,18 @@ namespace osu.Game.Screens.Play.PlayerSettings
{
Text = "Background dim:"
},
- dimSliderBar = new PlayerSliderBar(),
+ dimSliderBar = new PlayerSliderBar
+ {
+ DisplayAsPercentage = true
+ },
new OsuSpriteText
{
Text = "Background blur:"
},
- blurSliderBar = new PlayerSliderBar(),
+ blurSliderBar = new PlayerSliderBar
+ {
+ DisplayAsPercentage = true
+ },
new OsuSpriteText
{
Text = "Toggles:"