2
0
mirror of https://github.com/9ParsonsB/Pulsar.git synced 2025-04-05 17:39:39 -04:00
pulsar/ObservatoryCore/UI/Views/MainWindow.axaml.cs
Xjph 554948534e
observatory herald (#30)
* WIP: initial commit for observatory herald

* Plugin error handling refactor

* make error window non-modal

* tidy up plugin error handling

* first pass for basic herald functionality

* corrections for linux env

* Use FNV hash directly instead of managing through dictionary/index file

* resolve audio queuing issue, switch to personal NetCoreAudio fork

* merge cleanup

* add enable setting, populate defaults

* framework xml doc update

* Adjust settings, add style selection, replace locale with demonym in dropdown list.

* Test is position is on screen before saving/loading.

* use a default that's actually in the list
2021-11-15 10:57:46 -03:30

61 lines
2.1 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Observatory.UI.Views
{
public class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
#if DEBUG
this.AttachDevTools();
#endif
Height = Properties.Core.Default.MainWindowSize.Height;
Width = Properties.Core.Default.MainWindowSize.Width;
var savedPosition = new System.Drawing.Point(Properties.Core.Default.MainWindowPosition.X, Properties.Core.Default.MainWindowPosition.Y);
if (PointWithinDesktopWorkingArea(savedPosition))
Position = new PixelPoint(Properties.Core.Default.MainWindowPosition.X, Properties.Core.Default.MainWindowPosition.Y);
Closing += (object sender, System.ComponentModel.CancelEventArgs e) =>
{
var size = new System.Drawing.Size((int)System.Math.Round(Width), (int)System.Math.Round(Height));
Properties.Core.Default.MainWindowSize = size;
var position = new System.Drawing.Point(Position.X, Position.Y);
if (PointWithinDesktopWorkingArea(position))
Properties.Core.Default.MainWindowPosition = position;
Properties.Core.Default.Save();
};
}
private bool PointWithinDesktopWorkingArea(System.Drawing.Point position)
{
bool inBounds = false;
foreach (var screen in Screens.All)
{
if (screen.WorkingArea.TopLeft.X <= position.X
&& screen.WorkingArea.TopLeft.Y <= position.Y
&& screen.WorkingArea.BottomRight.X > position.X
&& screen.WorkingArea.BottomRight.Y > position.Y)
{
inBounds = true;
break;
}
}
return inBounds;
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}
}