From 18e8ca624554386bb408cacbebb6b0c7dd937b9f Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Tue, 17 Oct 2023 21:37:38 -0700 Subject: [PATCH] Add ability to revert slider settings to default when double-clicking nub --- .../Graphics/UserInterface/RoundedSliderBar.cs | 18 ++++++++++++++++-- osu.Game/Graphics/UserInterface/ShearedNub.cs | 11 +++++++++++ .../Graphics/UserInterface/ShearedSliderBar.cs | 3 ++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/RoundedSliderBar.cs b/osu.Game/Graphics/UserInterface/RoundedSliderBar.cs index 56af23ff10..e5976fe893 100644 --- a/osu.Game/Graphics/UserInterface/RoundedSliderBar.cs +++ b/osu.Game/Graphics/UserInterface/RoundedSliderBar.cs @@ -93,11 +93,12 @@ public RoundedSliderBar() nubContainer = new Container { RelativeSizeAxes = Axes.Both, - Child = Nub = new Nub + Child = Nub = new SliderNub { Origin = Anchor.TopCentre, RelativePositionAxes = Axes.X, - Current = { Value = true } + Current = { Value = true }, + OnDoubleClicked = () => Current.SetDefault(), }, }, hoverClickSounds = new HoverClickSounds() @@ -166,5 +167,18 @@ protected override void UpdateValue(float value) { Nub.MoveToX(value, 250, Easing.OutQuint); } + + public partial class SliderNub : Nub + { + public Action? OnDoubleClicked { get; init; } + + protected override bool OnClick(ClickEvent e) => true; + + protected override bool OnDoubleClick(DoubleClickEvent e) + { + OnDoubleClicked?.Invoke(); + return true; + } + } } } diff --git a/osu.Game/Graphics/UserInterface/ShearedNub.cs b/osu.Game/Graphics/UserInterface/ShearedNub.cs index 3a09fd7445..7485f68525 100644 --- a/osu.Game/Graphics/UserInterface/ShearedNub.cs +++ b/osu.Game/Graphics/UserInterface/ShearedNub.cs @@ -10,6 +10,7 @@ using osu.Framework.Graphics.Effects; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.UserInterface; +using osu.Framework.Input.Events; using osu.Game.Overlays; using osuTK; using osuTK.Graphics; @@ -18,6 +19,8 @@ namespace osu.Game.Graphics.UserInterface { public partial class ShearedNub : Container, IHasCurrentValue, IHasAccentColour { + public Action? OnDoubleClicked { get; init; } + protected const float BORDER_WIDTH = 3; public const int HEIGHT = 30; @@ -179,5 +182,13 @@ private void onCurrentValueChanged(ValueChangedEvent filled) main.TransformTo(nameof(BorderThickness), BORDER_WIDTH, duration, Easing.OutQuint); } } + + protected override bool OnClick(ClickEvent e) => true; + + protected override bool OnDoubleClick(DoubleClickEvent e) + { + OnDoubleClicked?.Invoke(); + return true; + } } } diff --git a/osu.Game/Graphics/UserInterface/ShearedSliderBar.cs b/osu.Game/Graphics/UserInterface/ShearedSliderBar.cs index a18a6a259c..9ef5f3073a 100644 --- a/osu.Game/Graphics/UserInterface/ShearedSliderBar.cs +++ b/osu.Game/Graphics/UserInterface/ShearedSliderBar.cs @@ -100,7 +100,8 @@ public ShearedSliderBar() X = -SHEAR.X * HEIGHT / 2f, Origin = Anchor.TopCentre, RelativePositionAxes = Axes.X, - Current = { Value = true } + Current = { Value = true }, + OnDoubleClicked = () => Current.SetDefault(), }, }, hoverClickSounds = new HoverClickSounds()