diff --git a/osu.Android.props b/osu.Android.props
index 8f4750e831..75828147a5 100644
--- a/osu.Android.props
+++ b/osu.Android.props
@@ -52,7 +52,7 @@
-
+
diff --git a/osu.Game.Tests/Visual/Settings/TestSceneSettingsPanel.cs b/osu.Game.Tests/Visual/Settings/TestSceneSettingsPanel.cs
index 4e295ba665..24c2eee783 100644
--- a/osu.Game.Tests/Visual/Settings/TestSceneSettingsPanel.cs
+++ b/osu.Game.Tests/Visual/Settings/TestSceneSettingsPanel.cs
@@ -62,7 +62,6 @@ namespace osu.Game.Tests.Visual.Settings
section.Children.Where(f => f.IsPresent)
.OfType()
.OfType()
- .Where(f => !(f is IHasFilterableChildren))
.All(f => f.FilterTerms.Any(t => t.ToString().Contains("scaling")))
));
diff --git a/osu.Game/Online/Rooms/APICreatedRoom.cs b/osu.Game/Online/Rooms/APICreatedRoom.cs
index 7f2bd13aec..254a338a60 100644
--- a/osu.Game/Online/Rooms/APICreatedRoom.cs
+++ b/osu.Game/Online/Rooms/APICreatedRoom.cs
@@ -7,8 +7,6 @@ using Newtonsoft.Json;
namespace osu.Game.Online.Rooms
{
- // TODO: Remove disable below after merging https://github.com/ppy/osu-framework/pull/5548 and applying follow-up changes game-side.
- // ReSharper disable once PartialTypeWithSinglePart
public partial class APICreatedRoom : Room
{
[JsonProperty("error")]
diff --git a/osu.Game/Online/Rooms/Room.cs b/osu.Game/Online/Rooms/Room.cs
index bdd7d6ce1c..8f346c4057 100644
--- a/osu.Game/Online/Rooms/Room.cs
+++ b/osu.Game/Online/Rooms/Room.cs
@@ -16,7 +16,7 @@ using osu.Game.Online.Rooms.RoomStatuses;
namespace osu.Game.Online.Rooms
{
[JsonObject(MemberSerialization.OptIn)]
- public partial class Room
+ public partial class Room : IDependencyInjectionCandidate
{
[Cached]
[JsonProperty("id")]
diff --git a/osu.Game/Overlays/FirstRunSetup/ScreenUIScale.cs b/osu.Game/Overlays/FirstRunSetup/ScreenUIScale.cs
index b28b04f228..63688841d0 100644
--- a/osu.Game/Overlays/FirstRunSetup/ScreenUIScale.cs
+++ b/osu.Game/Overlays/FirstRunSetup/ScreenUIScale.cs
@@ -233,7 +233,7 @@ namespace osu.Game.Overlays.FirstRunSetup
return parentDependencies.Get(type, info);
}
- public void Inject(T instance) where T : class
+ public void Inject(T instance) where T : class, IDependencyInjectionCandidate
{
parentDependencies.Inject(instance);
}
diff --git a/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs b/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs
index 63689961e6..bad06732d0 100644
--- a/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs
@@ -177,13 +177,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
updateScreenModeWarning();
}, true);
- windowModes.BindCollectionChanged((_, _) =>
- {
- if (windowModes.Count > 1)
- windowModeDropdown.Show();
- else
- windowModeDropdown.Hide();
- }, true);
+ windowModes.BindCollectionChanged((_, _) => updateDisplaySettingsVisibility());
currentDisplay.BindValueChanged(display => Schedule(() =>
{
@@ -219,7 +213,11 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
scalingSettings.ResizeHeightTo(0, transition_duration, Easing.OutQuint);
scalingSettings.AutoSizeAxes = scalingMode.Value != ScalingMode.Off ? Axes.Y : Axes.None;
- scalingSettings.ForEach(s => s.TransferValueOnCommit = scalingMode.Value == ScalingMode.Everything);
+ scalingSettings.ForEach(s =>
+ {
+ s.TransferValueOnCommit = scalingMode.Value == ScalingMode.Everything;
+ s.CanBeShown.Value = scalingMode.Value != ScalingMode.Off;
+ });
}
}
@@ -234,20 +232,10 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
private void updateDisplaySettingsVisibility()
{
- if (resolutions.Count > 1 && windowModeDropdown.Current.Value == WindowMode.Fullscreen)
- resolutionDropdown.Show();
- else
- resolutionDropdown.Hide();
-
- if (displayDropdown.Items.Count() > 1)
- displayDropdown.Show();
- else
- displayDropdown.Hide();
-
- if (host.Window?.SafeAreaPadding.Value.Total != Vector2.Zero)
- safeAreaConsiderationsCheckbox.Show();
- else
- safeAreaConsiderationsCheckbox.Hide();
+ windowModeDropdown.CanBeShown.Value = windowModes.Count > 1;
+ resolutionDropdown.CanBeShown.Value = resolutions.Count > 1 && windowModeDropdown.Current.Value == WindowMode.Fullscreen;
+ displayDropdown.CanBeShown.Value = displayDropdown.Items.Count() > 1;
+ safeAreaConsiderationsCheckbox.CanBeShown.Value = host.Window?.SafeAreaPadding.Value.Total != Vector2.Zero;
}
private void updateScreenModeWarning()
diff --git a/osu.Game/Overlays/Settings/Sections/Input/TabletSettings.cs b/osu.Game/Overlays/Settings/Sections/Input/TabletSettings.cs
index 27612738df..951cf3802f 100644
--- a/osu.Game/Overlays/Settings/Sections/Input/TabletSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/Input/TabletSettings.cs
@@ -143,6 +143,7 @@ namespace osu.Game.Overlays.Settings.Sections.Input
areaOffset.SetDefault();
areaSize.SetDefault();
},
+ CanBeShown = { BindTarget = enabled }
},
new SettingsButton
{
@@ -150,25 +151,29 @@ namespace osu.Game.Overlays.Settings.Sections.Input
Action = () =>
{
forceAspectRatio((float)host.Window.ClientSize.Width / host.Window.ClientSize.Height);
- }
+ },
+ CanBeShown = { BindTarget = enabled }
},
new SettingsSlider
{
TransferValueOnCommit = true,
LabelText = TabletSettingsStrings.XOffset,
- Current = offsetX
+ Current = offsetX,
+ CanBeShown = { BindTarget = enabled }
},
new SettingsSlider
{
TransferValueOnCommit = true,
LabelText = TabletSettingsStrings.YOffset,
- Current = offsetY
+ Current = offsetY,
+ CanBeShown = { BindTarget = enabled }
},
new SettingsSlider
{
TransferValueOnCommit = true,
LabelText = TabletSettingsStrings.Rotation,
- Current = rotation
+ Current = rotation,
+ CanBeShown = { BindTarget = enabled }
},
new RotationPresetButtons(tabletHandler)
{
@@ -181,24 +186,28 @@ namespace osu.Game.Overlays.Settings.Sections.Input
{
TransferValueOnCommit = true,
LabelText = TabletSettingsStrings.AspectRatio,
- Current = aspectRatio
+ Current = aspectRatio,
+ CanBeShown = { BindTarget = enabled }
},
new SettingsCheckbox
{
LabelText = TabletSettingsStrings.LockAspectRatio,
- Current = aspectLock
+ Current = aspectLock,
+ CanBeShown = { BindTarget = enabled }
},
new SettingsSlider
{
TransferValueOnCommit = true,
LabelText = CommonStrings.Width,
- Current = sizeX
+ Current = sizeX,
+ CanBeShown = { BindTarget = enabled }
},
new SettingsSlider
{
TransferValueOnCommit = true,
LabelText = CommonStrings.Height,
- Current = sizeY
+ Current = sizeY,
+ CanBeShown = { BindTarget = enabled }
},
}
},
diff --git a/osu.Game/Overlays/Settings/SettingsButton.cs b/osu.Game/Overlays/Settings/SettingsButton.cs
index dc1be1ce9f..5091ddc2d0 100644
--- a/osu.Game/Overlays/Settings/SettingsButton.cs
+++ b/osu.Game/Overlays/Settings/SettingsButton.cs
@@ -3,14 +3,16 @@
using System.Collections.Generic;
using System.Linq;
+using osu.Framework.Bindables;
using osu.Framework.Graphics;
+using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Cursor;
using osu.Framework.Localisation;
using osu.Game.Graphics.UserInterfaceV2;
namespace osu.Game.Overlays.Settings
{
- public partial class SettingsButton : RoundedButton, IHasTooltip
+ public partial class SettingsButton : RoundedButton, IHasTooltip, IConditionalFilterable
{
public SettingsButton()
{
@@ -20,6 +22,9 @@ namespace osu.Game.Overlays.Settings
public LocalisableString TooltipText { get; set; }
+ public BindableBool CanBeShown { get; } = new BindableBool(true);
+ IBindable IConditionalFilterable.CanBeShown => CanBeShown;
+
public override IEnumerable FilterTerms
{
get
diff --git a/osu.Game/Overlays/Settings/SettingsItem.cs b/osu.Game/Overlays/Settings/SettingsItem.cs
index 577f1738ba..5f4bb9d57f 100644
--- a/osu.Game/Overlays/Settings/SettingsItem.cs
+++ b/osu.Game/Overlays/Settings/SettingsItem.cs
@@ -22,7 +22,7 @@ using osuTK;
namespace osu.Game.Overlays.Settings
{
- public abstract partial class SettingsItem : Container, IFilterable, ISettingsItem, IHasCurrentValue, IHasTooltip
+ public abstract partial class SettingsItem : Container, IConditionalFilterable, ISettingsItem, IHasCurrentValue, IHasTooltip
{
protected abstract Drawable CreateControl();
@@ -144,6 +144,9 @@ namespace osu.Game.Overlays.Settings
public bool FilteringActive { get; set; }
+ public BindableBool CanBeShown { get; } = new BindableBool(true);
+ IBindable IConditionalFilterable.CanBeShown => CanBeShown;
+
public event Action SettingChanged;
private T classicDefault;
diff --git a/osu.Game/Overlays/Settings/SettingsSection.cs b/osu.Game/Overlays/Settings/SettingsSection.cs
index dced187035..9602e4373f 100644
--- a/osu.Game/Overlays/Settings/SettingsSection.cs
+++ b/osu.Game/Overlays/Settings/SettingsSection.cs
@@ -5,7 +5,6 @@
using System.Collections.Generic;
using System.Diagnostics;
-using System.Linq;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
@@ -19,7 +18,7 @@ using osuTK;
namespace osu.Game.Overlays.Settings
{
- public abstract partial class SettingsSection : Container, IHasFilterableChildren
+ public abstract partial class SettingsSection : Container, IFilterable
{
protected FillFlowContainer FlowContent;
protected override Container Content => FlowContent;
@@ -33,7 +32,6 @@ namespace osu.Game.Overlays.Settings
public abstract Drawable CreateIcon();
public abstract LocalisableString Header { get; }
- public IEnumerable FilterableChildren => Children.OfType();
public virtual IEnumerable FilterTerms => new[] { Header };
public const int ITEM_SPACING = 14;
diff --git a/osu.Game/Overlays/Settings/SettingsSubsection.cs b/osu.Game/Overlays/Settings/SettingsSubsection.cs
index 78fb53230e..784f20a6e8 100644
--- a/osu.Game/Overlays/Settings/SettingsSubsection.cs
+++ b/osu.Game/Overlays/Settings/SettingsSubsection.cs
@@ -8,7 +8,6 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Game.Graphics.Sprites;
using System.Collections.Generic;
-using System.Linq;
using osu.Framework.Allocation;
using osu.Framework.Localisation;
using osu.Framework.Testing;
@@ -17,7 +16,7 @@ using osu.Game.Graphics;
namespace osu.Game.Overlays.Settings
{
[ExcludeFromDynamicCompile]
- public abstract partial class SettingsSubsection : FillFlowContainer, IHasFilterableChildren
+ public abstract partial class SettingsSubsection : FillFlowContainer, IFilterable
{
protected override Container Content => FlowContent;
@@ -25,8 +24,6 @@ namespace osu.Game.Overlays.Settings
protected abstract LocalisableString Header { get; }
- public IEnumerable FilterableChildren => Children.OfType();
-
public virtual IEnumerable FilterTerms => new[] { Header };
public bool MatchingFilter
diff --git a/osu.Game/Tests/Beatmaps/HitObjectSampleTest.cs b/osu.Game/Tests/Beatmaps/HitObjectSampleTest.cs
index fbc920f7de..bb4e06654a 100644
--- a/osu.Game/Tests/Beatmaps/HitObjectSampleTest.cs
+++ b/osu.Game/Tests/Beatmaps/HitObjectSampleTest.cs
@@ -164,7 +164,7 @@ namespace osu.Game.Tests.Beatmaps
return fallback.Get(type, info);
}
- public void Inject(T instance) where T : class
+ public void Inject(T instance) where T : class, IDependencyInjectionCandidate
{
// Never used directly
}
diff --git a/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestScene.cs b/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestScene.cs
index 5350030276..87488710a7 100644
--- a/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestScene.cs
+++ b/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestScene.cs
@@ -128,7 +128,7 @@ namespace osu.Game.Tests.Visual.OnlinePlay
=> OnlinePlayDependencies?.Get(type, info) ?? parent.Get(type, info);
public void Inject(T instance)
- where T : class
+ where T : class, IDependencyInjectionCandidate
=> injectableDependencies.Inject(instance);
}
}
diff --git a/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestSceneDependencies.cs b/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestSceneDependencies.cs
index 35bdba0038..a9acbdcd7e 100644
--- a/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestSceneDependencies.cs
+++ b/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestSceneDependencies.cs
@@ -65,7 +65,7 @@ namespace osu.Game.Tests.Visual.OnlinePlay
=> dependencies.Get(type, info);
public void Inject(T instance)
- where T : class
+ where T : class, IDependencyInjectionCandidate
=> dependencies.Inject(instance);
protected void Cache(object instance)
diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj
index afc80d073f..6e75450594 100644
--- a/osu.Game/osu.Game.csproj
+++ b/osu.Game/osu.Game.csproj
@@ -35,7 +35,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/osu.iOS.props b/osu.iOS.props
index 4d8c1af28b..bb20b0474d 100644
--- a/osu.iOS.props
+++ b/osu.iOS.props
@@ -62,7 +62,7 @@
-
+
@@ -82,7 +82,7 @@
-
+