Allow window to remember its size, position and state (GTK + Avalonia) (#4657)

* Update ConfigurationState.cs

* Update ConfigurationFileFormat.cs

* Update MainWindow.cs

* Update ConfigurationFileFormat.cs

* Update ConfigurationState.cs

* Update MainWindow.cs

* Update MainWindow.cs

* Update Ryujinx.Ui.Common/Configuration/ConfigurationState.cs

Co-authored-by: gdkchan <gab.dark.100@gmail.com>

* Update MainWindow.cs

* Update Ryujinx/Ui/MainWindow.cs

Co-authored-by: gdkchan <gab.dark.100@gmail.com>

* Initial properties

* Viewmodel adjustments and additions

* abstract and monitor dimension changes

* Remove position from ViewModel and simplify methods

* Remove unused dep

* Update configuration and fix typo from AA

* review changes

* Review changes

* Screensize checks - Ava

* Review changes 2

* basic review changes

* Standardise GTK/Ava functions

* Actually call function

---------

Co-authored-by: HaizenTrist <123991082+HaizenTrist@users.noreply.github.com>
Co-authored-by: gdkchan <gab.dark.100@gmail.com>
This commit is contained in:
MutantAura 2023-04-28 21:59:53 +01:00 committed by GitHub
parent 3b4ff2d6d9
commit 21c4176157
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 189 additions and 15 deletions

View file

@ -153,13 +153,8 @@ namespace Ryujinx.Ui
// Apply custom theme if needed.
ThemeHelper.ApplyTheme();
Gdk.Monitor monitor = Display.GetMonitor(0);
// Sets overridden fields.
int monitorWidth = monitor.Geometry.Width * monitor.ScaleFactor;
int monitorHeight = monitor.Geometry.Height * monitor.ScaleFactor;
DefaultWidth = monitorWidth < 1280 ? monitorWidth : 1280;
DefaultHeight = monitorHeight < 760 ? monitorHeight : 760;
SetWindowSizePosition();
Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png");
Title = $"Ryujinx {Program.Version}";
@ -1314,6 +1309,7 @@ namespace Ryujinx.Ui
{
if (!_gameLoaded || !ConfigurationState.Instance.ShowConfirmExit || GtkDialog.CreateExitDialog())
{
SaveWindowSizePosition();
End();
}
}
@ -1322,6 +1318,7 @@ namespace Ryujinx.Ui
{
if (!_gameLoaded || !ConfigurationState.Instance.ShowConfirmExit || GtkDialog.CreateExitDialog())
{
SaveWindowSizePosition();
End();
}
else
@ -1330,6 +1327,33 @@ namespace Ryujinx.Ui
}
}
private void SetWindowSizePosition()
{
DefaultWidth = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeWidth;
DefaultHeight = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeHeight;
Move(ConfigurationState.Instance.Ui.WindowStartup.WindowPositionX, ConfigurationState.Instance.Ui.WindowStartup.WindowPositionY);
if (ConfigurationState.Instance.Ui.WindowStartup.WindowMaximized)
{
Maximize();
}
}
private void SaveWindowSizePosition()
{
GetSize(out int windowWidth, out int windowHeight);
GetPosition(out int windowXPos, out int windowYPos);
ConfigurationState.Instance.Ui.WindowStartup.WindowMaximized.Value = IsMaximized;
ConfigurationState.Instance.Ui.WindowStartup.WindowSizeWidth.Value = windowWidth;
ConfigurationState.Instance.Ui.WindowStartup.WindowSizeHeight.Value = windowHeight;
ConfigurationState.Instance.Ui.WindowStartup.WindowPositionX.Value = windowXPos;
ConfigurationState.Instance.Ui.WindowStartup.WindowPositionY.Value = windowYPos;
SaveConfig();
}
private void StopEmulation_Pressed(object sender, EventArgs args)
{
if (_emulationContext != null)
@ -1831,4 +1855,4 @@ namespace Ryujinx.Ui
UpdateGameTable();
}
}
}
}