diff --git a/osu.Game/Localisation/GraphicsSettingsStrings.cs b/osu.Game/Localisation/GraphicsSettingsStrings.cs
index 996a1350eb..1c9aa64df5 100644
--- a/osu.Game/Localisation/GraphicsSettingsStrings.cs
+++ b/osu.Game/Localisation/GraphicsSettingsStrings.cs
@@ -54,6 +54,11 @@ namespace osu.Game.Localisation
///
public static LocalisableString Resolution => new TranslatableString(getKey(@"resolution"), @"Resolution");
+ ///
+ /// "Display"
+ ///
+ public static LocalisableString Display => new TranslatableString(getKey(@"display"), @"Display");
+
///
/// "UI scaling"
///
diff --git a/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs b/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs
index adf1453d1a..a1688b87cc 100644
--- a/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs
@@ -27,7 +27,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
private FillFlowContainer> scalingSettings;
- private readonly IBindable currentDisplay = new Bindable();
+ private readonly Bindable currentDisplay = new Bindable();
private readonly IBindableList windowModes = new BindableList();
private Bindable scalingMode;
@@ -39,6 +39,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
private OsuGameBase game { get; set; }
private SettingsDropdown resolutionDropdown;
+ private SettingsDropdown displayDropdown;
private SettingsDropdown windowModeDropdown;
private Bindable scalingPositionX;
@@ -72,6 +73,12 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
ItemSource = windowModes,
Current = config.GetBindable(FrameworkSetting.WindowMode),
},
+ displayDropdown = new DisplaySettingsDropdown
+ {
+ LabelText = GraphicsSettingsStrings.Display,
+ Items = host.Window?.Displays,
+ Current = currentDisplay,
+ },
resolutionDropdown = new ResolutionSettingsDropdown
{
LabelText = GraphicsSettingsStrings.Resolution,
@@ -142,7 +149,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
windowModeDropdown.Current.BindValueChanged(mode =>
{
- updateResolutionDropdown();
+ updateFullscreenDropdowns();
windowModeDropdown.WarningText = mode.NewValue != WindowMode.Fullscreen ? GraphicsSettingsStrings.NotFullscreenNote : default;
}, true);
@@ -168,7 +175,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
.Distinct());
}
- updateResolutionDropdown();
+ updateFullscreenDropdowns();
}), true);
scalingMode.BindValueChanged(mode =>
@@ -183,12 +190,17 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
// initial update bypasses transforms
updateScalingModeVisibility();
- void updateResolutionDropdown()
+ void updateFullscreenDropdowns()
{
if (resolutions.Count > 1 && windowModeDropdown.Current.Value == WindowMode.Fullscreen)
resolutionDropdown.Show();
else
resolutionDropdown.Hide();
+
+ if (displayDropdown.Items.Count() > 1)
+ displayDropdown.Show();
+ else
+ displayDropdown.Hide();
}
void updateScalingModeVisibility()
@@ -243,6 +255,19 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
public override LocalisableString TooltipText => base.TooltipText + "x";
}
+ private class DisplaySettingsDropdown : SettingsDropdown
+ {
+ protected override OsuDropdown CreateDropdown() => new DisplaySettingsDropdownControl();
+
+ private class DisplaySettingsDropdownControl : DropdownControl
+ {
+ protected override LocalisableString GenerateItemText(Display item)
+ {
+ return $"{item.Index}: {item.Name} ({item.Bounds.Width}x{item.Bounds.Height})";
+ }
+ }
+ }
+
private class ResolutionSettingsDropdown : SettingsDropdown
{
protected override OsuDropdown CreateDropdown() => new ResolutionDropdownControl();