diff options
| author | MutantAura <44103205+MutantAura@users.noreply.github.com> | 2023-04-28 21:59:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-28 22:59:53 +0200 |
| commit | 21c4176157a1c7ef3086333ddb5036325869eac3 (patch) | |
| tree | e88711f05cd6b7b07885771b36de6853319cb617 /src/Ryujinx.Ava/UI/Windows | |
| parent | 3b4ff2d6d909dc0b74f4befe391ec537cd963ec0 (diff) | |
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>
Diffstat (limited to 'src/Ryujinx.Ava/UI/Windows')
| -rw-r--r-- | src/Ryujinx.Ava/UI/Windows/MainWindow.axaml | 5 | ||||
| -rw-r--r-- | src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs | 49 |
2 files changed, 51 insertions, 3 deletions
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"> <Window.Styles> 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(); |
