Merge pull request #3454 from smoogipoo/fix-fullscreen-crash

Fix macOS crashing in fullscreen mode
This commit is contained in:
Dean Herbert 2018-09-20 19:18:15 +09:00 committed by GitHub
commit 42e87b553e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -35,6 +35,8 @@ 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);
Container resolutionSettingsContainer;
Children = new Drawable[] Children = new Drawable[]
{ {
windowModeDropdown = new SettingsEnumDropdown<WindowMode> windowModeDropdown = new SettingsEnumDropdown<WindowMode>
@ -42,12 +44,10 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
LabelText = "Screen mode", LabelText = "Screen mode",
Bindable = config.GetBindable<WindowMode>(FrameworkSetting.WindowMode), Bindable = config.GetBindable<WindowMode>(FrameworkSetting.WindowMode),
}, },
resolutionDropdown = new SettingsDropdown<Size> resolutionSettingsContainer = new Container
{ {
LabelText = "Resolution", RelativeSizeAxes = Axes.X,
ShowsDefaultIndicator = false, AutoSizeAxes = Axes.Y
Items = getResolutions(),
Bindable = sizeFullscreen
}, },
new SettingsCheckbox new SettingsCheckbox
{ {
@ -81,16 +81,29 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
}, },
}; };
windowModeDropdown.Bindable.BindValueChanged(windowMode => var resolutions = getResolutions();
if (resolutions.Count > 1)
{ {
if (windowMode == WindowMode.Fullscreen) resolutionSettingsContainer.Child = resolutionDropdown = new SettingsDropdown<Size>
{ {
resolutionDropdown.Show(); LabelText = "Resolution",
sizeFullscreen.TriggerChange(); ShowsDefaultIndicator = false,
} Items = resolutions,
else Bindable = sizeFullscreen
resolutionDropdown.Hide(); };
}, true);
windowModeDropdown.Bindable.BindValueChanged(windowMode =>
{
if (windowMode == WindowMode.Fullscreen)
{
resolutionDropdown.Show();
sizeFullscreen.TriggerChange();
}
else
resolutionDropdown.Hide();
});
}
letterboxing.BindValueChanged(isVisible => letterboxing.BindValueChanged(isVisible =>
{ {
@ -102,7 +115,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
}, true); }, true);
} }
private IEnumerable<KeyValuePair<string, Size>> getResolutions() private IReadOnlyList<KeyValuePair<string, Size>> getResolutions()
{ {
var resolutions = new KeyValuePair<string, Size>("Default", new Size(9999, 9999)).Yield(); var resolutions = new KeyValuePair<string, Size>("Default", new Size(9999, 9999)).Yield();
@ -112,8 +125,8 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics
.OrderByDescending(r => r.Width) .OrderByDescending(r => r.Width)
.ThenByDescending(r => r.Height) .ThenByDescending(r => r.Height)
.Select(res => new KeyValuePair<string, Size>($"{res.Width}x{res.Height}", new Size(res.Width, res.Height))) .Select(res => new KeyValuePair<string, Size>($"{res.Width}x{res.Height}", new Size(res.Width, res.Height)))
.Distinct()).ToList(); .Distinct());
return resolutions; return resolutions.ToList();
} }
} }
} }