From 6aff1ff7e6bfae79b9f01cc57b04deffe6a7a558 Mon Sep 17 00:00:00 2001 From: CloneWith Date: Thu, 30 Oct 2025 17:38:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?add:=20=E6=B7=BB=E5=8A=A0=20`SettingsSlider?= =?UTF-8?q?Piece`=20=E6=82=AC=E5=81=9C=E6=8F=90=E7=A4=BA=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Settings/Items/SettingsPieceBasePanel.cs | 38 ++++++++++--- .../SideBar/Settings/Items/SettingsSlider.cs | 55 ++++++++++++++++--- .../Settings/Items/SettingsSliderPiece.cs | 23 +++++++- 3 files changed, 98 insertions(+), 18 deletions(-) diff --git a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsPieceBasePanel.cs b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsPieceBasePanel.cs index c47da44..6bf0213 100644 --- a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsPieceBasePanel.cs +++ b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsPieceBasePanel.cs @@ -31,6 +31,8 @@ public partial class SettingsPieceBasePanel : CompositeDrawable Size = new Vector2(25) }; + protected GridContainer FirstLineGrid { get; private set; } + public virtual LocalisableString Description { get => description; @@ -91,14 +93,6 @@ private void load(AudioManager audio) RelativeSizeAxes = Axes.Both, Depth = float.MaxValue }, - new Container - { - RelativeSizeAxes = Axes.X, - Height = 25, - Margin = new MarginPadding { Top = 10 }, - Padding = new MarginPadding { Left = 10 + 25 + 5 }, - Child = CreateSideDrawable() - }, FillFlow = new FillFlowContainer { AutoSizeAxes = Axes.Y, @@ -108,7 +102,33 @@ private void load(AudioManager audio) Spacing = new Vector2(5), Children = new Drawable[] { - SpriteIcon, + FirstLineGrid = new GridContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + RowDimensions = [new Dimension(GridSizeMode.AutoSize)], + ColumnDimensions = + [ + new Dimension(GridSizeMode.AutoSize), + new Dimension(), + ], + Content = new[] + { + new Drawable[] + { + SpriteIcon, + CreateSideDrawable().With(d => + { + d.Anchor = Anchor.CentreLeft; + d.Origin = Anchor.CentreLeft; + d.Margin = new MarginPadding + { + Horizontal = 5, + }; + }), + }, + }, + }, SpriteText, } }, diff --git a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSlider.cs b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSlider.cs index 23fcb2b..5927a28 100644 --- a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSlider.cs +++ b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSlider.cs @@ -3,6 +3,7 @@ using System; using System.Numerics; using osu.Framework.Allocation; +using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; @@ -14,31 +15,69 @@ namespace osu.Game.Rulesets.Hikariii.Features.Player.Graphics.SideBar.Settings.I public partial class SettingsSlider : OsuSliderBar where T : struct, INumber, IMinMaxValue, IConvertible { + /// + /// Controls whether to show a hint line below the slider body. + /// + public readonly BindableBool HintActive = new BindableBool(); + + private Circle baseLine; private Container circle; [BackgroundDependencyLoader] private void load() { Height = 1; - Child = circle = new Container + + Children = new Drawable[] { - RelativePositionAxes = Axes.X, - Size = new Vector2(25), - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - Child = new Circle + baseLine = new Circle { Anchor = Anchor.Centre, Origin = Anchor.Centre, - RelativeSizeAxes = Axes.Both, + RelativeSizeAxes = Axes.X, + Height = 2, + Alpha = 0, + }, + circle = new Container + { RelativePositionAxes = Axes.X, - X = -0.5f + Size = new Vector2(25), + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + Child = new Circle + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.Both, + RelativePositionAxes = Axes.X, + X = -0.5f + } } }; RangePadding = 0; } + protected override void LoadComplete() + { + base.LoadComplete(); + HintActive.BindValueChanged(onLineStatusChanged); + } + + private void onLineStatusChanged(ValueChangedEvent e) + { + if (e.NewValue) + { + baseLine.ResizeHeightTo(4, 250, Easing.OutExpo); + baseLine.FadeTo(0.8f, 250, Easing.OutExpo); + } + else + { + baseLine.ResizeHeightTo(2, 250, Easing.OutExpo); + baseLine.FadeOut(250, Easing.OutExpo); + } + } + protected override void UpdateValue(float value) { circle.MoveToX(value, 250, Easing.OutExpo); diff --git a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSliderPiece.cs b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSliderPiece.cs index 3f140a7..b878c0a 100644 --- a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSliderPiece.cs +++ b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSliderPiece.cs @@ -2,9 +2,11 @@ using System; using System.Numerics; +using JetBrains.Annotations; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; +using osu.Framework.Input.Events; using osu.Framework.Localisation; namespace osu.Game.Rulesets.Hikariii.Features.Player.Graphics.SideBar.Settings.Items @@ -27,7 +29,7 @@ public LocalisableString TooltipText protected override IconUsage DefaultIcon => FontAwesome.Solid.SlidersH; - protected override Drawable CreateSideDrawable() => new SettingsSlider + protected override Drawable CreateSideDrawable() => slider = new SettingsSlider { RelativeSizeAxes = Axes.Both, Current = Bindable, @@ -35,9 +37,28 @@ public LocalisableString TooltipText TransferValueOnCommit = TransferValueOnCommit, }; + [CanBeNull] + private SettingsSlider slider; + protected override void OnMiddleClick() { Bindable.Value = Bindable.Default; } + + protected override bool OnHover(HoverEvent e) + { + if (slider != null) + slider.HintActive.Value = true; + + return base.OnHover(e); + } + + protected override void OnHoverLost(HoverLostEvent e) + { + if (slider != null) + slider.HintActive.Value = false; + + base.OnHoverLost(e); + } } } From d18727fb888fa8e3f699f3cd67c9df90ef841e9e Mon Sep 17 00:00:00 2001 From: CloneWith Date: Thu, 30 Oct 2025 17:39:10 +0800 Subject: [PATCH 2/3] =?UTF-8?q?misc:=20=E8=B0=83=E8=8A=82=E6=BB=91?= =?UTF-8?q?=E5=9D=97=E4=BD=93=E7=BC=A9=E6=94=BE=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Player/Graphics/SideBar/Settings/Items/SettingsSlider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSlider.cs b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSlider.cs index 5927a28..8e38857 100644 --- a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSlider.cs +++ b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSlider.cs @@ -81,7 +81,7 @@ private void onLineStatusChanged(ValueChangedEvent e) protected override void UpdateValue(float value) { circle.MoveToX(value, 250, Easing.OutExpo); - circle.ScaleTo(value + 0.2f, 250, Easing.OutBack); + circle.ScaleTo(value * 0.75f + 0.25f, 250, Easing.OutBack); } } } From 07385de93ba4898fd74a220dd74915a2e9b5c2ea Mon Sep 17 00:00:00 2001 From: CloneWith Date: Thu, 30 Oct 2025 17:39:26 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20Anchor=20&=20Origin=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Graphics/SideBar/Settings/Items/SettingsListPiece.cs | 8 ++++++-- .../SideBar/Settings/Items/SettingsSeparatorPiece.cs | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsListPiece.cs b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsListPiece.cs index 0b93780..24c7077 100644 --- a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsListPiece.cs +++ b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsListPiece.cs @@ -19,7 +19,9 @@ public partial class SettingsListPiece : SettingsPieceBasePanel, ISettingsIte private readonly CurrentValueText valueText = new CurrentValueText { - RelativeSizeAxes = Axes.X + RelativeSizeAxes = Axes.X, + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, }; public List Values { get; set; } @@ -83,7 +85,9 @@ public LocalisableString Text Alpha = 0, Font = OsuFont.GetFont(size: 20), Y = -5, - RelativeSizeAxes = Axes.X + RelativeSizeAxes = Axes.X, + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, }; Schedule(() => AddInternal(currentText)); diff --git a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSeparatorPiece.cs b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSeparatorPiece.cs index b2c6406..4943f58 100644 --- a/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSeparatorPiece.cs +++ b/osu.Game.Rulesets.Hikariii/Features/Player/Graphics/SideBar/Settings/Items/SettingsSeparatorPiece.cs @@ -21,10 +21,10 @@ private void load() RelativeSizeAxes = Axes.X; Width = 1; - SpriteText.Anchor = SpriteText.Origin = SpriteIcon.Anchor = SpriteIcon.Origin = Anchor.BottomRight; + SpriteText.Anchor = SpriteText.Origin = FirstLineGrid.Anchor = FirstLineGrid.Origin = Anchor.BottomRight; FillFlow.Direction = FillDirection.Horizontal; - SpriteIcon.Hide(); + FirstLineGrid.Hide(); } protected override void OnColorChanged()