Browse Source

Merge pull request #3699 from AvaloniaUI/fixes/osx-dont-zoom-when-normal-state-selected

OSX backend calls OnResized to keep WindowState inSync.
# Conflicts:
#	native/Avalonia.Native/src/OSX/window.mm
release/0.9.6
danwalmsley 6 years ago
committed by Dan Walmsley
parent
commit
757220107b
  1. 95
      native/Avalonia.Native/src/OSX/window.mm

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

@ -31,9 +31,11 @@ public:
AvnPoint lastPositionSet;
NSString* _lastTitle;
IAvnAppMenu* _mainMenu;
bool _shown;
WindowBaseImpl(IAvnWindowBaseEvents* events, IAvnGlContext* gl)
{
_shown = false;
_mainMenu = nullptr;
BaseEvents = events;
_glContext = gl;
@ -116,6 +118,8 @@ public:
[Window setTitle:_lastTitle];
[Window setTitleVisibility:NSWindowTitleVisible];
_shown = true;
return S_OK;
}
@ -401,6 +405,7 @@ protected:
[Window setStyleMask:GetStyle()];
}
public:
virtual void OnResized ()
{
@ -592,57 +597,63 @@ private:
{
_lastWindowState = state;
switch (state) {
case Maximized:
lastPositionSet.X = 0;
lastPositionSet.Y = 0;
if([Window isMiniaturized])
{
[Window deminiaturize:Window];
}
if(!IsZoomed())
{
DoZoom();
}
break;
case Minimized:
[Window miniaturize:Window];
break;
default:
if([Window isMiniaturized])
{
[Window deminiaturize:Window];
}
if(IsZoomed())
{
DoZoom();
}
break;
if(_shown)
{
switch (state) {
case Maximized:
lastPositionSet.X = 0;
lastPositionSet.Y = 0;
if([Window isMiniaturized])
{
[Window deminiaturize:Window];
}
if(!IsZoomed())
{
DoZoom();
}
break;
case Minimized:
[Window miniaturize:Window];
break;
default:
if([Window isMiniaturized])
{
[Window deminiaturize:Window];
}
if(IsZoomed())
{
DoZoom();
}
break;
}
}
return S_OK;
}
}
protected:
virtual void OnResized () override
{
auto windowState = [Window isMiniaturized] ? Minimized
: (IsZoomed() ? Maximized : Normal);
if (windowState != _lastWindowState)
if(_shown)
{
_lastWindowState = windowState;
auto windowState = [Window isMiniaturized] ? Minimized
: (IsZoomed() ? Maximized : Normal);
WindowEvents->WindowStateChanged(windowState);
if (windowState != _lastWindowState)
{
_lastWindowState = windowState;
WindowEvents->WindowStateChanged(windowState);
}
}
}
protected:
virtual NSWindowStyleMask GetStyle() override
{
unsigned long s = NSWindowStyleMaskBorderless;
@ -1290,6 +1301,11 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
}
}
- (void)windowDidResize:(NSNotification *)notification
{
_parent->OnResized();
}
- (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame
{
return true;
@ -1360,6 +1376,7 @@ protected:
[Window setContentSize:NSSize{x, y}];
[Window setFrameTopLeftPoint:ToNSPoint(ConvertPointY(lastPositionSet))];
return S_OK;
}
}

Loading…
Cancel
Save