From 21c4176157a1c7ef3086333ddb5036325869eac3 Mon Sep 17 00:00:00 2001 From: MutantAura <44103205+MutantAura@users.noreply.github.com> Date: Fri, 28 Apr 2023 21:59:53 +0100 Subject: 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 * Update MainWindow.cs * Update Ryujinx/Ui/MainWindow.cs Co-authored-by: gdkchan * 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 --- .../Configuration/ConfigurationState.cs | 69 ++++++++++++++++++++-- 1 file changed, 65 insertions(+), 4 deletions(-) (limited to 'src/Ryujinx.Ui.Common/Configuration/ConfigurationState.cs') diff --git a/src/Ryujinx.Ui.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.Ui.Common/Configuration/ConfigurationState.cs index 3a68cc26..fc3693ae 100644 --- a/src/Ryujinx.Ui.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.Ui.Common/Configuration/ConfigurationState.cs @@ -83,6 +83,27 @@ namespace Ryujinx.Ui.Common.Configuration } } + // + /// Determines main window start-up position, size and state + /// + public class WindowStartupSettings + { + public ReactiveObject WindowSizeWidth { get; private set; } + public ReactiveObject WindowSizeHeight { get; private set; } + public ReactiveObject WindowPositionX { get; private set; } + public ReactiveObject WindowPositionY { get; private set; } + public ReactiveObject WindowMaximized { get; private set; } + + public WindowStartupSettings() + { + WindowSizeWidth = new ReactiveObject(); + WindowSizeHeight = new ReactiveObject(); + WindowPositionX = new ReactiveObject(); + WindowPositionY = new ReactiveObject(); + WindowMaximized = new ReactiveObject(); + } + } + /// /// Used to toggle columns in the GUI /// @@ -103,6 +124,11 @@ namespace Ryujinx.Ui.Common.Configuration /// public ShownFileTypeSettings ShownFileTypes { get; private set; } + /// + /// Determines main window start-up position, size and state + /// + public WindowStartupSettings WindowStartup { get; private set; } + /// /// Language Code for the UI /// @@ -163,7 +189,8 @@ namespace Ryujinx.Ui.Common.Configuration GuiColumns = new Columns(); ColumnSort = new ColumnSortSettings(); GameDirs = new ReactiveObject>(); - ShownFileTypes = new ShownFileTypeSettings(); + ShownFileTypes = new ShownFileTypeSettings(); + WindowStartup = new WindowStartupSettings(); EnableCustomTheme = new ReactiveObject(); CustomThemePath = new ReactiveObject(); BaseStyle = new ReactiveObject(); @@ -663,12 +690,12 @@ namespace Ryujinx.Ui.Common.Configuration FileSizeColumn = Ui.GuiColumns.FileSizeColumn, PathColumn = Ui.GuiColumns.PathColumn }, - ColumnSort = new ColumnSort + ColumnSort = new ColumnSort { SortColumnId = Ui.ColumnSort.SortColumnId, SortAscending = Ui.ColumnSort.SortAscending }, - GameDirs = Ui.GameDirs, + GameDirs = Ui.GameDirs, ShownFileTypes = new ShownFileTypes { NSP = Ui.ShownFileTypes.NSP, @@ -678,6 +705,14 @@ namespace Ryujinx.Ui.Common.Configuration NRO = Ui.ShownFileTypes.NRO, NSO = Ui.ShownFileTypes.NSO, }, + WindowStartup = new WindowStartup + { + WindowSizeWidth = Ui.WindowStartup.WindowSizeWidth, + WindowSizeHeight = Ui.WindowStartup.WindowSizeHeight, + WindowPositionX = Ui.WindowStartup.WindowPositionX, + WindowPositionY = Ui.WindowStartup.WindowPositionY, + WindowMaximized = Ui.WindowStartup.WindowMaximized, + }, LanguageCode = Ui.LanguageCode, EnableCustomTheme = Ui.EnableCustomTheme, CustomThemePath = Ui.CustomThemePath, @@ -781,6 +816,11 @@ namespace Ryujinx.Ui.Common.Configuration Ui.IsAscendingOrder.Value = true; Ui.StartFullscreen.Value = false; Ui.ShowConsole.Value = true; + Ui.WindowStartup.WindowSizeWidth.Value = 1280; + Ui.WindowStartup.WindowSizeHeight.Value = 760; + Ui.WindowStartup.WindowPositionX.Value = 0; + Ui.WindowStartup.WindowPositionY.Value = 0; + Ui.WindowStartup.WindowMaximized.Value = false; Hid.EnableKeyboard.Value = false; Hid.EnableMouse.Value = false; Hid.Hotkeys.Value = new KeyboardHotkeys @@ -1334,13 +1374,29 @@ namespace Ryujinx.Ui.Common.Configuration if (configurationFileFormat.Version < 46) { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 45."); + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 46."); configurationFileFormat.MultiplayerLanInterfaceId = "0"; configurationFileUpdated = true; } + if (configurationFileFormat.Version < 47) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 47."); + + configurationFileFormat.WindowStartup = new WindowStartup + { + WindowPositionX = 0, + WindowPositionY = 0, + WindowSizeHeight = 760, + WindowSizeWidth = 1280, + WindowMaximized = false, + }; + + configurationFileUpdated = true; + } + Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; Graphics.ResScale.Value = configurationFileFormat.ResScale; Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom; @@ -1416,6 +1472,11 @@ namespace Ryujinx.Ui.Common.Configuration Ui.ApplicationSort.Value = configurationFileFormat.ApplicationSort; Ui.StartFullscreen.Value = configurationFileFormat.StartFullscreen; Ui.ShowConsole.Value = configurationFileFormat.ShowConsole; + Ui.WindowStartup.WindowSizeWidth.Value = configurationFileFormat.WindowStartup.WindowSizeWidth; + Ui.WindowStartup.WindowSizeHeight.Value = configurationFileFormat.WindowStartup.WindowSizeHeight; + Ui.WindowStartup.WindowPositionX.Value = configurationFileFormat.WindowStartup.WindowPositionX; + Ui.WindowStartup.WindowPositionY.Value = configurationFileFormat.WindowStartup.WindowPositionY; + Ui.WindowStartup.WindowMaximized.Value = configurationFileFormat.WindowStartup.WindowMaximized; Hid.EnableKeyboard.Value = configurationFileFormat.EnableKeyboard; Hid.EnableMouse.Value = configurationFileFormat.EnableMouse; Hid.Hotkeys.Value = configurationFileFormat.Hotkeys; -- cgit v1.2.3