Browse Source

Merge pull request #5963 from AvaloniaUI/fixes/osx-shadow

Fix - Missing Shadow - OSX and Window Position
release/0.10.6
Dan Walmsley 5 years ago
parent
commit
a3dfb23afa
  1. 1
      native/Avalonia.Native/src/OSX/window.h
  2. 29
      native/Avalonia.Native/src/OSX/window.mm
  3. 12
      src/Avalonia.Controls/Window.cs

1
native/Avalonia.Native/src/OSX/window.h

@ -34,7 +34,6 @@ class WindowBaseImpl;
-(double) getScaling; -(double) getScaling;
-(double) getExtendedTitleBarHeight; -(double) getExtendedTitleBarHeight;
-(void) setIsExtended:(bool)value; -(void) setIsExtended:(bool)value;
-(void) updateShadow;
@end @end
struct INSWindowHolder struct INSWindowHolder

29
native/Avalonia.Native/src/OSX/window.mm

@ -50,7 +50,6 @@ public:
[Window setBackingType:NSBackingStoreBuffered]; [Window setBackingType:NSBackingStoreBuffered];
[Window setOpaque:false]; [Window setOpaque:false];
[Window setContentView: StandardContainer];
} }
virtual HRESULT ObtainNSWindowHandle(void** ret) override virtual HRESULT ObtainNSWindowHandle(void** ret) override
@ -112,6 +111,9 @@ public:
{ {
SetPosition(lastPositionSet); SetPosition(lastPositionSet);
UpdateStyle(); UpdateStyle();
[Window setContentView: StandardContainer];
if(ShouldTakeFocusOnShow() && activate) if(ShouldTakeFocusOnShow() && activate)
{ {
[Window makeKeyAndOrderFront:Window]; [Window makeKeyAndOrderFront:Window];
@ -125,10 +127,6 @@ public:
_shown = true; _shown = true;
dispatch_async(dispatch_get_main_queue(), ^{
[Window updateShadow];
});
return S_OK; return S_OK;
} }
} }
@ -195,9 +193,11 @@ public:
{ {
if(ret == nullptr) if(ret == nullptr)
return E_POINTER; return E_POINTER;
auto frame = [View frame]; auto frame = [View frame];
ret->Width = frame.size.width; ret->Width = frame.size.width;
ret->Height = frame.size.height; ret->Height = frame.size.height;
return S_OK; return S_OK;
} }
} }
@ -258,6 +258,11 @@ public:
y = maxSize.height; y = maxSize.height;
} }
if(!_shown)
{
BaseEvents->Resized(AvnSize{x,y});
}
[Window setContentSize:NSSize{x, y}]; [Window setContentSize:NSSize{x, y}];
return S_OK; return S_OK;
@ -1842,19 +1847,6 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
double _lastScaling; 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; -(void) setIsExtended:(bool)value;
{ {
_isExtended = value; _isExtended = value;
@ -2013,7 +2005,6 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
_lastScaling = [self backingScaleFactor]; _lastScaling = [self backingScaleFactor];
[self setOpaque:NO]; [self setOpaque:NO];
[self setBackgroundColor: [NSColor clearColor]]; [self setBackgroundColor: [NSColor clearColor]];
[self invalidateShadow];
_isExtended = false; _isExtended = false;
return self; return self;
} }

12
src/Avalonia.Controls/Window.cs

@ -668,10 +668,11 @@ namespace Avalonia.Controls
Owner = parent; Owner = parent;
parent?.AddChild(this, false); parent?.AddChild(this, false);
PlatformImpl?.Show(ShowActivated);
Renderer?.Start();
SetWindowStartupLocation(Owner?.PlatformImpl); SetWindowStartupLocation(Owner?.PlatformImpl);
PlatformImpl?.Show(ShowActivated);
Renderer?.Start();
} }
OnOpened(EventArgs.Empty); OnOpened(EventArgs.Empty);
} }
@ -739,6 +740,9 @@ namespace Avalonia.Controls
PlatformImpl?.SetParent(owner.PlatformImpl); PlatformImpl?.SetParent(owner.PlatformImpl);
Owner = owner; Owner = owner;
owner.AddChild(this, true); owner.AddChild(this, true);
SetWindowStartupLocation(owner.PlatformImpl);
PlatformImpl?.Show(ShowActivated); PlatformImpl?.Show(ShowActivated);
Renderer?.Start(); Renderer?.Start();
@ -756,8 +760,6 @@ namespace Avalonia.Controls
OnOpened(EventArgs.Empty); OnOpened(EventArgs.Empty);
} }
SetWindowStartupLocation(owner.PlatformImpl);
return result.Task; return result.Task;
} }

Loading…
Cancel
Save