Skip to content

Commit

Permalink
OSX backend calls OnResized to keep WindowState inSync.
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Walmsley committed Mar 27, 2020
1 parent 3cd149f commit 5a3602f
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 39 deletions.
1 change: 1 addition & 0 deletions native/Avalonia.Native/src/OSX/window.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ struct INSWindowHolder
struct IWindowStateChanged
{
virtual void WindowStateChanged () = 0;
virtual void OnResized () = 0;
};

#endif /* window_h */
100 changes: 61 additions & 39 deletions native/Avalonia.Native/src/OSX/window.mm
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,11 @@
AvnPoint lastPositionSet;
NSString* _lastTitle;
IAvnAppMenu* _mainMenu;
bool _shown;

WindowBaseImpl(IAvnWindowBaseEvents* events, IAvnGlContext* gl)
{
_shown = false;
_mainMenu = nullptr;
BaseEvents = events;
_glContext = gl;
Expand Down Expand Up @@ -115,6 +117,8 @@ virtual HRESULT Show() override
[NSApp activateIgnoringOtherApps:YES];

[Window setTitle:_lastTitle];

_shown = true;

return S_OK;
}
Expand Down Expand Up @@ -615,57 +619,64 @@ virtual HRESULT SetWindowState (AvnWindowState state) override
{
_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:

public:
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;
Expand Down Expand Up @@ -1360,6 +1371,16 @@ - (void)windowDidDeminiaturize:(NSNotification *)notification
}
}

- (void)windowDidResize:(NSNotification *)notification
{
auto parent = dynamic_cast<IWindowStateChanged*>(_parent.operator->());

if(parent != nullptr)
{
parent->OnResized();
}
}

- (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame
{
return true;
Expand Down Expand Up @@ -1430,6 +1451,7 @@ virtual HRESULT Resize(double x, double y) override
[Window setContentSize:NSSize{x, y}];

[Window setFrameTopLeftPoint:ToNSPoint(ConvertPointY(lastPositionSet))];

return S_OK;
}
}
Expand Down

0 comments on commit 5a3602f

Please sign in to comment.