1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-30 22:22:59 +08:00

Allow disabling filter items in beatmap listing overlay

This commit is contained in:
Salman Alshamrani 2024-12-22 07:47:57 -05:00
parent 431d57a8a1
commit c24f690019
2 changed files with 28 additions and 7 deletions

View File

@ -73,7 +73,12 @@ namespace osu.Game.Overlays.BeatmapListing
private void currentChanged(object? sender, NotifyCollectionChangedEventArgs e) private void currentChanged(object? sender, NotifyCollectionChangedEventArgs e)
{ {
foreach (var c in Children) foreach (var c in Children)
c.Active.Value = Current.Contains(c.Value); {
if (!c.Active.Disabled)
c.Active.Value = Current.Contains(c.Value);
else if (c.Active.Value != Current.Contains(c.Value))
throw new InvalidOperationException($"Expected filter {c.Value} to be set to {Current.Contains(c.Value)}, but was {c.Active.Value}");
}
} }
/// <summary> /// <summary>
@ -100,8 +105,9 @@ namespace osu.Game.Overlays.BeatmapListing
protected partial class MultipleSelectionFilterTabItem : FilterTabItem<T> protected partial class MultipleSelectionFilterTabItem : FilterTabItem<T>
{ {
private Drawable activeContent = null!; private Container activeContent = null!;
private Circle background = null!; private Circle background = null!;
private SpriteIcon icon = null!;
public MultipleSelectionFilterTabItem(T value) public MultipleSelectionFilterTabItem(T value)
: base(value) : base(value)
@ -123,7 +129,6 @@ namespace osu.Game.Overlays.BeatmapListing
Alpha = 0, Alpha = 0,
Padding = new MarginPadding Padding = new MarginPadding
{ {
Left = -16,
Right = -4, Right = -4,
Vertical = -2 Vertical = -2
}, },
@ -134,8 +139,9 @@ namespace osu.Game.Overlays.BeatmapListing
Colour = Color4.White, Colour = Color4.White,
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
}, },
new SpriteIcon icon = new SpriteIcon
{ {
Alpha = 0f,
Icon = FontAwesome.Solid.TimesCircle, Icon = FontAwesome.Solid.TimesCircle,
Size = new Vector2(10), Size = new Vector2(10),
Colour = ColourProvider.Background4, Colour = ColourProvider.Background4,
@ -160,13 +166,26 @@ namespace osu.Game.Overlays.BeatmapListing
{ {
Color4 colour = Active.Value ? ColourActive : ColourNormal; Color4 colour = Active.Value ? ColourActive : ColourNormal;
if (IsHovered) if (!Enabled.Value)
colour = colour.Darken(1f);
else if (IsHovered)
colour = Active.Value ? colour.Darken(0.2f) : colour.Lighten(0.2f); colour = Active.Value ? colour.Darken(0.2f) : colour.Lighten(0.2f);
if (Active.Value) if (Active.Value)
{ {
// This just allows enough spacing for adjacent tab items to show the "x". if (Enabled.Value)
Padding = new MarginPadding { Left = 12 }; {
// This just allows enough spacing for adjacent tab items to show the "x".
Padding = new MarginPadding { Left = 12 };
activeContent.Padding = activeContent.Padding with { Left = -16 };
icon.Show();
}
else
{
Padding = new MarginPadding();
activeContent.Padding = activeContent.Padding with { Left = -6 };
icon.Hide();
}
activeContent.FadeIn(200, Easing.OutQuint); activeContent.FadeIn(200, Easing.OutQuint);
background.FadeColour(colour, 200, Easing.OutQuint); background.FadeColour(colour, 200, Easing.OutQuint);

View File

@ -57,7 +57,9 @@ namespace osu.Game.Overlays.BeatmapListing
{ {
base.LoadComplete(); base.LoadComplete();
Enabled.BindValueChanged(_ => UpdateState());
UpdateState(); UpdateState();
FinishTransforms(true); FinishTransforms(true);
} }