diff --git a/Barotrauma/BarotraumaClient/Source/GameMain.cs b/Barotrauma/BarotraumaClient/Source/GameMain.cs index 474d4518c..793cde17c 100644 --- a/Barotrauma/BarotraumaClient/Source/GameMain.cs +++ b/Barotrauma/BarotraumaClient/Source/GameMain.cs @@ -207,18 +207,6 @@ namespace Barotrauma #endif } - private void ApplyGraphicsSettings() - { -#if WINDOWS - if (WindowActive) - { -#endif - ApplyGraphicsSettings(); -#if WINDOWS - } -#endif - } - private void ApplyGraphicsSettings() { #if !OSX @@ -243,6 +231,7 @@ namespace Barotrauma GraphicsWidth = GraphicsDevice.DisplayMode.Width; GraphicsHeight = GraphicsDevice.DisplayMode.Height; } + GraphicsDeviceManager.GraphicsProfile = GraphicsProfile.Reach; GraphicsDeviceManager.PreferredBackBufferFormat = SurfaceFormat.Color; GraphicsDeviceManager.PreferMultiSampling = false; @@ -348,8 +337,15 @@ namespace Barotrauma private void HandleDefocus(object sender, EventArgs e) { CoroutineManager.StopCoroutines("FocusCoroutine"); - GraphicsDeviceManager.IsFullScreen = false; - GraphicsDeviceManager.ApplyChanges(); + if (GraphicsDeviceManager.IsFullScreen && !GraphicsDeviceManager.HardwareModeSwitch) + { + DisplayMode minMode = GraphicsAdapter.DefaultAdapter.SupportedDisplayModes.First(m => m.Format == SurfaceFormat.Color); + GraphicsDeviceManager.PreferredBackBufferWidth = minMode.Width; + GraphicsDeviceManager.PreferredBackBufferHeight = minMode.Height; + GraphicsDeviceManager.IsFullScreen = false; + GraphicsDeviceManager.ApplyChanges(); + Thread.Sleep(100); + } } #endif diff --git a/Barotrauma/BarotraumaClient/Source/GameSettings.cs b/Barotrauma/BarotraumaClient/Source/GameSettings.cs index d65e28bcc..671a67481 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSettings.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSettings.cs @@ -192,6 +192,7 @@ namespace Barotrauma foreach (DisplayMode mode in GraphicsAdapter.DefaultAdapter.SupportedDisplayModes) { if (supportedDisplayModes.Any(m => m.Width == mode.Width && m.Height == mode.Height)) { continue; } + if (mode.Width < MinSupportedResolution.X || mode.Height < MinSupportedResolution.Y) { continue; } #if OSX // Monogame currently doesn't support retina displays // so we need to disable resolutions above the viewport size. @@ -211,7 +212,6 @@ namespace Barotrauma foreach (DisplayMode mode in supportedDisplayModes) { - if (mode.Width < MinSupportedResolution.X || mode.Height < MinSupportedResolution.Y) { continue; } resolutionDD.AddItem(mode.Width + "x" + mode.Height, mode); if (GraphicsWidth == mode.Width && GraphicsHeight == mode.Height) resolutionDD.SelectItem(mode); } @@ -248,15 +248,32 @@ namespace Barotrauma { displayModeDD.SelectItem(GameMain.Config.WindowMode); } +#endif + displayModeDD.OnSelected = (guiComponent, obj) => + { + displayModeDD.SelectItem(WindowMode.Fullscreen); + } + else + { + displayModeDD.SelectItem(GameMain.Config.WindowMode); + } #endif displayModeDD.OnSelected = (guiComponent, obj) => { PauseOnFocusLost = tickBox.Selected; UnsavedSettings = true; GameMain.Config.WindowMode = (WindowMode)guiComponent.UserData; -#if !LINUX - resolutionDD.ButtonEnabled = GameMain.Config.WindowMode == WindowMode.Windowed; -#endif + if (GameMain.Config.WindowMode == WindowMode.BorderlessWindowed) + { + resolutionDD.SelectItem(GraphicsAdapter.DefaultAdapter.SupportedDisplayModes.First( + m => m.Width == GameMain.Instance.GraphicsDevice.DisplayMode.Width && + m.Height == GameMain.Instance.GraphicsDevice.DisplayMode.Height)); + resolutionDD.ButtonEnabled = false; + } + else + { + resolutionDD.ButtonEnabled = true; + } return true; };