Window mode can be changed mid-game, fixed "apply" button not becoming active in the settings menu when changing the window mode

This commit is contained in:
Joonas Rikkonen
2018-01-24 16:07:26 +02:00
parent 7199095c40
commit 30e624e572
2 changed files with 28 additions and 7 deletions
+17 -5
View File
@@ -74,6 +74,12 @@ namespace Barotrauma
private set; private set;
} }
public static WindowMode WindowMode
{
get;
private set;
}
public static int GraphicsWidth public static int GraphicsWidth
{ {
get; get;
@@ -155,7 +161,7 @@ namespace Barotrauma
GraphicsDeviceManager.PreferMultiSampling = false; GraphicsDeviceManager.PreferMultiSampling = false;
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = Config.VSyncEnabled; GraphicsDeviceManager.SynchronizeWithVerticalRetrace = Config.VSyncEnabled;
if (Config.WindowMode == WindowMode.Windowed) if (Config.WindowMode == Barotrauma.WindowMode.Windowed)
{ {
//for whatever reason, window isn't centered automatically //for whatever reason, window isn't centered automatically
//since MonoGame 3.6 (nuget package might be broken), so //since MonoGame 3.6 (nuget package might be broken), so
@@ -164,17 +170,23 @@ namespace Barotrauma
(GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height - GraphicsHeight) / 2); (GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height - GraphicsHeight) / 2);
} }
GraphicsDeviceManager.HardwareModeSwitch = Config.WindowMode != WindowMode.BorderlessWindowed;
GraphicsDeviceManager.IsFullScreen = Config.WindowMode == WindowMode.Fullscreen || Config.WindowMode == WindowMode.BorderlessWindowed;
GraphicsDeviceManager.PreferredBackBufferWidth = GraphicsWidth; GraphicsDeviceManager.PreferredBackBufferWidth = GraphicsWidth;
GraphicsDeviceManager.PreferredBackBufferHeight = GraphicsHeight; GraphicsDeviceManager.PreferredBackBufferHeight = GraphicsHeight;
GraphicsDeviceManager.ApplyChanges(); SetWindowMode(Config.WindowMode);
defaultViewport = GraphicsDevice.Viewport; defaultViewport = GraphicsDevice.Viewport;
} }
public void SetWindowMode(WindowMode windowMode)
{
WindowMode = windowMode;
GraphicsDeviceManager.HardwareModeSwitch = Config.WindowMode != WindowMode.BorderlessWindowed;
GraphicsDeviceManager.IsFullScreen = Config.WindowMode == WindowMode.Fullscreen || Config.WindowMode == WindowMode.BorderlessWindowed;
GraphicsDeviceManager.ApplyChanges();
}
public void ResetViewPort() public void ResetViewPort()
{ {
GraphicsDevice.Viewport = defaultViewport; GraphicsDevice.Viewport = defaultViewport;
@@ -90,7 +90,12 @@ namespace Barotrauma
displayModeDD.SelectItem(GameMain.Config.WindowMode); displayModeDD.SelectItem(GameMain.Config.WindowMode);
displayModeDD.OnSelected = (guiComponent, obj) => { GameMain.Config.WindowMode = (WindowMode)guiComponent.UserData; return true; }; displayModeDD.OnSelected = (guiComponent, obj) =>
{
UnsavedSettings = true;
GameMain.Config.WindowMode = (WindowMode)guiComponent.UserData;
return true;
};
y += 70; y += 70;
@@ -130,7 +135,6 @@ namespace Barotrauma
foreach (ContentPackage contentPackage in ContentPackage.list) foreach (ContentPackage contentPackage in ContentPackage.list)
{ {
contentPackageDD.AddItem(contentPackage.Name, contentPackage); contentPackageDD.AddItem(contentPackage.Name, contentPackage);
if (SelectedContentPackage == contentPackage) contentPackageDD.SelectItem(contentPackage); if (SelectedContentPackage == contentPackage) contentPackageDD.SelectItem(contentPackage);
} }
@@ -238,6 +242,11 @@ namespace Barotrauma
settingsFrame.Flash(Color.Green); settingsFrame.Flash(Color.Green);
if (GameMain.WindowMode != GameMain.Config.WindowMode)
{
GameMain.Instance.SetWindowMode(GameMain.Config.WindowMode);
}
if (GameMain.GraphicsWidth != GameMain.Config.GraphicsWidth || GameMain.GraphicsHeight != GameMain.Config.GraphicsHeight) if (GameMain.GraphicsWidth != GameMain.Config.GraphicsWidth || GameMain.GraphicsHeight != GameMain.Config.GraphicsHeight)
{ {
new GUIMessageBox(TextManager.Get("RestartRequiredLabel"), TextManager.Get("RestartRequiredText")); new GUIMessageBox(TextManager.Get("RestartRequiredLabel"), TextManager.Get("RestartRequiredText"));