diff --git a/src/Utilities.cs b/src/Utilities.cs index 7344219..e51dcb7 100644 --- a/src/Utilities.cs +++ b/src/Utilities.cs @@ -3,6 +3,7 @@ using System.IO; using System.Runtime.InteropServices; using Avalonia; +using Avalonia.Controls; using Avalonia.Media.Imaging; using Avalonia.Platform; @@ -20,6 +21,17 @@ namespace AvaloniaCoreRTDemo return new Bitmap(assetStream); } + public static PixelPoint GetWindowPosition(Window window) + { + if (!IsOSX || !window.FrameSize.HasValue) + return window.Position; + else + { + Int32 yOffset = (Int32)(window.FrameSize.Value.Height - window.ClientSize.Height); + return new(window.Position.X, window.Position.Y + yOffset); + } + } + public static Bitmap GetImageFromFile(String path) { try diff --git a/src/Windows/MainWindow.axaml.cs b/src/Windows/MainWindow.axaml.cs index 4df6271..fd51056 100644 --- a/src/Windows/MainWindow.axaml.cs +++ b/src/Windows/MainWindow.axaml.cs @@ -1,48 +1,48 @@ -using Avalonia; -using Avalonia.Controls; +using Avalonia; +using Avalonia.Controls; using Avalonia.Markup.Xaml; -using AvaloniaCoreRTDemo.Controls; -using AvaloniaCoreRTDemo.Interfaces; -using AvaloniaCoreRTDemo.Windows.ViewModels; - -namespace AvaloniaCoreRTDemo.Windows -{ - public sealed partial class MainWindow : Window, IMainWindow - { - private readonly Application? _app = App.Current; - - private MainControl MainControl => this.GetControl("MainControl"); - +using AvaloniaCoreRTDemo.Controls; +using AvaloniaCoreRTDemo.Interfaces; +using AvaloniaCoreRTDemo.Windows.ViewModels; + +namespace AvaloniaCoreRTDemo.Windows +{ + public sealed partial class MainWindow : Window, IMainWindow + { + private readonly Application? _app = App.Current; + + private MainControl MainControl => this.GetControl("MainControl"); + public MainWindow() : this(default) { } - public MainWindow(IMainWindow? window) - { - this.InitializeComponent(window); -#if DEBUG - this.AttachDevTools(); -#endif - } - - IThemeSwitch IMainWindow.ThemeSwitch => (IThemeSwitch)this._app!; - IMainWindowState IMainWindow.Model => (IMainWindowState)this.MainControl.DataContext!; - PixelPoint IMainWindow.Position => this.Position; - Size IMainWindow.ClientSize => this.ClientSize; - Size? IMainWindow.FrameSize => this.FrameSize; - WindowState IMainWindow.State => this.WindowState; - - private void InitializeComponent(IMainWindow? window) - { - AvaloniaXamlLoader.Load(this); - this.DataContext = new MainViewModel(this); - if (window is not null) - { - this.MainControl.Reload(window.Model); - this.WindowStartupLocation = WindowStartupLocation.Manual; - this.WindowState = window.State; - this.Position = window.Position; - this.FrameSize = window.FrameSize; - this.ClientSize = window.ClientSize; - } - } - } -} + public MainWindow(IMainWindow? window) + { + this.InitializeComponent(window); +#if DEBUG + this.AttachDevTools(); +#endif + } + + IThemeSwitch IMainWindow.ThemeSwitch => (IThemeSwitch)this._app!; + IMainWindowState IMainWindow.Model => (IMainWindowState)this.MainControl.DataContext!; + PixelPoint IMainWindow.Position => Utilities.GetWindowPosition(this); + Size IMainWindow.ClientSize => this.ClientSize; + Size? IMainWindow.FrameSize => this.FrameSize; + WindowState IMainWindow.State => this.WindowState; + + private void InitializeComponent(IMainWindow? window) + { + AvaloniaXamlLoader.Load(this); + this.DataContext = new MainViewModel(this); + if (window is not null) + { + this.MainControl.Reload(window.Model); + this.WindowStartupLocation = WindowStartupLocation.Manual; + this.WindowState = window.State; + this.Position = window.Position; + this.FrameSize = window.FrameSize; + this.ClientSize = window.ClientSize; + } + } + } +}