From 99cdff2d7060700f94e2a769fe38a6c5fe751432 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 21 May 2021 22:07:55 +0100 Subject: [PATCH] fix screen centering on OSX before window has been shown. --- native/Avalonia.Native/src/OSX/window.mm | 21 +++++++++++++++++---- src/Avalonia.Controls/Window.cs | 6 +++++- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/window.mm b/native/Avalonia.Native/src/OSX/window.mm index bdc6e4f828..78092e12c6 100644 --- a/native/Avalonia.Native/src/OSX/window.mm +++ b/native/Avalonia.Native/src/OSX/window.mm @@ -25,6 +25,7 @@ public: ComPtr _glContext; NSObject* renderTarget; AvnPoint lastPositionSet; + CGSize _lastRequestedSize; NSString* _lastTitle; IAvnMenu* _mainMenu; @@ -193,9 +194,18 @@ public: { if(ret == nullptr) return E_POINTER; - auto frame = [View frame]; - ret->Width = frame.size.width; - ret->Height = frame.size.height; + + if(_shown) + { + auto frame = [View frame]; + ret->Width = frame.size.width; + ret->Height = frame.size.height; + } + else + { + ret->Width = _lastRequestedSize.width; + ret->Height = _lastRequestedSize.height; + } return S_OK; } } @@ -256,6 +266,9 @@ public: y = maxSize.height; } + _lastRequestedSize.width = x; + _lastRequestedSize.height = y; + [Window setContentSize:NSSize{x, y}]; return S_OK; @@ -530,7 +543,7 @@ private: _decorations = SystemDecorationsFull; _transitioningWindowState = false; _inSetWindowState = false; - _lastWindowState = Normal; + _lastWindowState = (AvnWindowState)-1; WindowEvents = events; [Window setCanBecomeKeyAndMain]; [Window disableCursorRects]; diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index 700c3d9bad..ab6e16d8dd 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -653,7 +653,11 @@ namespace Avalonia.Controls { using (BeginAutoSizing()) { - PlatformImpl?.Resize(initialSize); + if (PlatformImpl != null) + { + PlatformImpl.Resize(initialSize); + ClientSize = PlatformImpl.ClientSize; + } } }