1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-28 00:07:20 +08:00

Fix resolutionDropdown

This commit is contained in:
Roman Kapustin 2018-06-21 20:42:22 +03:00
parent 2ecf78e3d2
commit 5d26d5d4ed

View File

@ -20,6 +20,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
private Bindable<bool> letterboxing; private Bindable<bool> letterboxing;
private Bindable<Size> sizeFullscreen; private Bindable<Size> sizeFullscreen;
private readonly BindableInt resolutionDropdownBindable = new BindableInt();
private OsuGame game; private OsuGame game;
private SettingsDropdown<int> resolutionDropdown; private SettingsDropdown<int> resolutionDropdown;
@ -36,14 +37,23 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
letterboxing = config.GetBindable<bool>(FrameworkSetting.Letterboxing); letterboxing = config.GetBindable<bool>(FrameworkSetting.Letterboxing);
sizeFullscreen = config.GetBindable<Size>(FrameworkSetting.SizeFullscreen); sizeFullscreen = config.GetBindable<Size>(FrameworkSetting.SizeFullscreen);
var resolutions = getResolutions(); sizeFullscreen.ValueChanged += size =>
var resolutionDropdownBindable = new BindableInt(resolutions.FirstOrDefault(r => r.Key.StartsWith($"{sizeFullscreen.Value.Width}x{sizeFullscreen.Value.Height}")).Value); {
KeyValuePair<string, int> valuePair = getResolutions().FirstOrDefault(r => r.Key.StartsWith($"{size.Width}x{size.Height}"));
resolutionDropdownBindable.Value = valuePair.Value;
};
resolutionDropdownBindable.ValueChanged += resolution => resolutionDropdownBindable.ValueChanged += resolution =>
{ {
var newResolution = resolutions.First(r => r.Value == resolution); var newSelection = getResolutions().First(r => r.Value == resolution);
var newResolutionparts = newResolution.Key.Split('x'); var newSelectionParts = newSelection.Key.Split('x');
sizeFullscreen.Value = new Size(int.Parse(newResolutionparts.First()), int.Parse(newResolutionparts.Last()));
var newSelectionWidth = int.Parse(newSelectionParts.First());
var newSelectionHeight = int.Parse(newSelectionParts.Last());
if (sizeFullscreen.Value.Width != newSelectionWidth || sizeFullscreen.Value.Height != newSelectionHeight)
sizeFullscreen.Value = new Size(newSelectionWidth, newSelectionHeight);
}; };
Children = new Drawable[] Children = new Drawable[]
@ -56,7 +66,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
resolutionDropdown = new SettingsDropdown<int> resolutionDropdown = new SettingsDropdown<int>
{ {
LabelText = "Resolution", LabelText = "Resolution",
Items = resolutions, Items = getResolutions(),
Bindable = resolutionDropdownBindable Bindable = resolutionDropdownBindable
}, },
new SettingsCheckbox new SettingsCheckbox
@ -94,7 +104,10 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
windowModeDropdown.Bindable.ValueChanged += windowMode => windowModeDropdown.Bindable.ValueChanged += windowMode =>
{ {
if (windowMode == WindowMode.Fullscreen) if (windowMode == WindowMode.Fullscreen)
{
resolutionDropdown.Show(); resolutionDropdown.Show();
sizeFullscreen.TriggerChange();
}
else else
resolutionDropdown.Hide(); resolutionDropdown.Hide();
}; };
@ -113,7 +126,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
private List<KeyValuePair<string, int>> getResolutions() private List<KeyValuePair<string, int>> getResolutions()
{ {
var availableDisplayResolutions = (game.Window as DesktopGameWindow)?.AvailableDisplayResolutions; var availableDisplayResolutions = (game.Window as DesktopGameWindow)?.AvailableDisplayResolutions.OrderByDescending(r => r.Width).ThenByDescending(r => r.Height);
if (availableDisplayResolutions == null) if (availableDisplayResolutions == null)
return new List<KeyValuePair<string, int>>(); return new List<KeyValuePair<string, int>>();
var availableDisplayResolutionsStr = availableDisplayResolutions.Select(r => $"{r.Width}x{r.Height}").Distinct().ToList(); var availableDisplayResolutionsStr = availableDisplayResolutions.Select(r => $"{r.Width}x{r.Height}").Distinct().ToList();