aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Ava/UI/Windows
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Ava/UI/Windows')
-rw-r--r--src/Ryujinx.Ava/UI/Windows/MainWindow.axaml5
-rw-r--r--src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs49
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();