From 2364f664179444e954934c2fd3d41f551e5d51e2 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 19 May 2021 11:19:56 +0100 Subject: [PATCH] Merge pull request #5943 from AvaloniaUI/fixes/missing-osx-shadow-border trick to make OSX invalidate the shadow. --- native/Avalonia.Native/src/OSX/window.h | 1 + native/Avalonia.Native/src/OSX/window.mm | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/native/Avalonia.Native/src/OSX/window.h b/native/Avalonia.Native/src/OSX/window.h index b1f64bca88..6a4ca2b8d8 100644 --- a/native/Avalonia.Native/src/OSX/window.h +++ b/native/Avalonia.Native/src/OSX/window.h @@ -34,6 +34,7 @@ class WindowBaseImpl; -(double) getScaling; -(double) getExtendedTitleBarHeight; -(void) setIsExtended:(bool)value; +-(void) updateShadow; @end struct INSWindowHolder diff --git a/native/Avalonia.Native/src/OSX/window.mm b/native/Avalonia.Native/src/OSX/window.mm index d7afbdaa3a..e7c144b2d3 100644 --- a/native/Avalonia.Native/src/OSX/window.mm +++ b/native/Avalonia.Native/src/OSX/window.mm @@ -124,7 +124,11 @@ public: [Window setTitle:_lastTitle]; _shown = true; - + + dispatch_async(dispatch_get_main_queue(), ^{ + [Window updateShadow]; + }); + return S_OK; } } @@ -1838,6 +1842,19 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent double _lastScaling; } +- (void)updateShadow +{ + // Common problem in Cocoa where [invalidateShadow] does work, + // This hack forces Cocoa to invalidate the shadow. + + NSRect frame = [self frame]; + NSRect updatedFrame = NSMakeRect(frame.origin.x, frame.origin.y, frame.size.width + 1.0, frame.size.height + 1.0); + [self setFrame:updatedFrame display:YES]; + [self setFrame:frame display:YES]; + + [self invalidateShadow]; +} + -(void) setIsExtended:(bool)value; { _isExtended = value;