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 --- src/Ryujinx.Ava/UI/Windows/MainWindow.axaml | 5 ++- src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs | 49 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) (limited to 'src/Ryujinx.Ava/UI/Windows') diff --git a/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml b/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml index 08b99cf5..de01f90f 100644 --- a/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml +++ b/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml @@ -12,15 +12,14 @@ Cursor="{Binding Cursor}" Title="{Binding Title}" WindowState="{Binding WindowState}" - Width="1280" - Height="777" + Width="{Binding WindowWidth}" + Height="{Binding WindowHeight}" MinWidth="1092" MinHeight="672" d:DesignHeight="720" d:DesignWidth="1280" x:CompileBindings="True" x:DataType="viewModels:MainWindowViewModel" - WindowStartupLocation="CenterScreen" mc:Ignorable="d" Focusable="True"> diff --git a/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs index 81e05506..404d4ee0 100644 --- a/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs @@ -62,6 +62,8 @@ namespace Ryujinx.Ava.UI.Windows DataContext = ViewModel; + SetWindowSizePosition(); + InitializeComponent(); Load(); @@ -297,6 +299,51 @@ namespace Ryujinx.Ava.UI.Windows LoadHotKeys(); } + private void SetWindowSizePosition() + { + PixelPoint SavedPoint = new PixelPoint(ConfigurationState.Instance.Ui.WindowStartup.WindowPositionX, + ConfigurationState.Instance.Ui.WindowStartup.WindowPositionY); + + ViewModel.WindowHeight = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeHeight * Program.WindowScaleFactor; + ViewModel.WindowWidth = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeWidth * Program.WindowScaleFactor; + + ViewModel.WindowState = ConfigurationState.Instance.Ui.WindowStartup.WindowMaximized.Value is true ? WindowState.Maximized : WindowState.Normal; + + if (CheckScreenBounds(SavedPoint)) + { + Position = SavedPoint; + } + + else WindowStartupLocation = WindowStartupLocation.CenterScreen; + } + + private bool CheckScreenBounds(PixelPoint configPoint) + { + for (int i = 0; i < Screens.ScreenCount; i++) + { + if (Screens.All[i].Bounds.Contains(configPoint)) + { + return true; + } + } + + Logger.Warning?.Print(LogClass.Application, $"Failed to find valid start-up coordinates. Defaulting to primary monitor center."); + return false; + } + + private void SaveWindowSizePosition() + { + ConfigurationState.Instance.Ui.WindowStartup.WindowSizeHeight.Value = (int)Height; + ConfigurationState.Instance.Ui.WindowStartup.WindowSizeWidth.Value = (int)Width; + + ConfigurationState.Instance.Ui.WindowStartup.WindowPositionX.Value = Position.X; + ConfigurationState.Instance.Ui.WindowStartup.WindowPositionY.Value = Position.Y; + + ConfigurationState.Instance.Ui.WindowStartup.WindowMaximized.Value = WindowState == WindowState.Maximized; + + MainWindowViewModel.SaveConfig(); + } + protected override void OnOpened(EventArgs e) { base.OnOpened(e); @@ -388,6 +435,8 @@ namespace Ryujinx.Ava.UI.Windows return; } + SaveWindowSizePosition(); + ApplicationLibrary.CancelLoading(); InputManager.Dispose(); Program.Exit(); -- cgit v1.2.3