DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit c6e3ea5b9d1fe6ed4f40fa677fe5b25f91259c65
parent 2267b49baf049c6d3164c7fc6461ea1b2b157fbc
Author: falkTX <falktx@falktx.com>
Date:   Sat, 14 Aug 2021 00:22:36 +0100

Custom puglSetWindowSize on macOS, needed for reaper

Diffstat:
Mdgl/src/pugl.cpp | 25+++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/dgl/src/pugl.cpp b/dgl/src/pugl.cpp @@ -302,9 +302,30 @@ PuglStatus puglSetWindowSize(PuglView* const view, const uint width, const uint view->defaultHeight = height; #if defined(DISTRHO_OS_HAIKU) || defined(DISTRHO_OS_MAC) - // keep upstream behaviour + // replace the 2 views setFrame with setFrameSize const PuglRect frame = { view->frame.x, view->frame.y, (double)width, (double)height }; - return puglSetFrame(view, frame); + PuglInternals* const impl = view->impl; + + // Update view frame to exactly the requested frame in Pugl coordinates + view->frame = frame; + + const NSRect framePx = rectToNsRect(frame); + const NSRect framePt = nsRectToPoints(view, framePx); + if (impl->window) + { + // Resize window to fit new content rect + const NSRect screenPt = rectToScreen(viewScreen(view), framePt); + const NSRect winFrame = [impl->window frameRectForContentRect:screenPt]; + + [impl->window setFrame:winFrame display:NO]; + } + + // Resize views + const NSSize sizePx = NSMakeSize(frame.width, frame.height); + const NSSize sizePt = [impl->drawView convertSizeFromBacking:sizePx]; + + [impl->wrapperView setFrameSize:(impl->window ? sizePt : framePt.size)]; + [impl->drawView setFrameSize:sizePt]; #elif defined(DISTRHO_OS_WINDOWS) // matches upstream pugl, except we add SWP_NOMOVE flag if (view->impl->hwnd)