DPF

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

commit d0413dfbd6580fcb89dcbee11cad9319975474cc
parent d48c7ffc0fe7fe1d0515b9737a3af64c58acdaf1
Author: falkTX <falktx@falktx.com>
Date:   Wed, 29 Dec 2021 04:02:26 +0000

Fix vst3 initial size on macOS; More geometry constraint fixing

Diffstat:
Mdgl/src/Window.cpp | 10++++++++--
Mdistrho/src/DistrhoUI.cpp | 13+++++++++++--
Mdistrho/src/DistrhoUIVST3.cpp | 14++++++++++++--
3 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/dgl/src/Window.cpp b/dgl/src/Window.cpp @@ -201,8 +201,14 @@ void Window::setSize(uint width, uint height) if (pData->isEmbed) { const double scaleFactor = pData->scaleFactor; - const uint minWidth = static_cast<uint>(pData->minWidth * scaleFactor + 0.5); - const uint minHeight = static_cast<uint>(pData->minHeight * scaleFactor + 0.5); + uint minWidth = pData->minWidth; + uint minHeight = pData->minHeight; + + if (pData->autoScaling && scaleFactor != 1.0) + { + minWidth *= scaleFactor; + minHeight *= scaleFactor; + } // handle geometry constraints here if (width < minWidth) diff --git a/distrho/src/DistrhoUI.cpp b/distrho/src/DistrhoUI.cpp @@ -199,7 +199,7 @@ UI::UI(const uint width, const uint height, const bool automaticallyScaleAndSetA Widget::setSize(width, height); if (automaticallyScaleAndSetAsMinimumSize) - setGeometryConstraints(width, height, true, true); + setGeometryConstraints(width, height, true, true, true); } #else // unused @@ -383,7 +383,16 @@ void UI::onResize(const ResizeEvent& ev) // NOTE: only used for VST3 void UI::requestSizeChange(const uint width, const uint height) { - uiData->setSizeCallback(width, height); +# ifdef DISTRHO_PLUGIN_TARGET_VST3 + if (uiData->initializing) + uiData->window->setSizeForVST3(width, height); + else + uiData->setSizeCallback(width, height); +# else + // unused + (void)width; + (void)height; +# endif } #endif diff --git a/distrho/src/DistrhoUIVST3.cpp b/distrho/src/DistrhoUIVST3.cpp @@ -257,6 +257,7 @@ public: rect->right /= scaleFactor; rect->bottom /= scaleFactor; #endif + d_stdout("getSize request returning %i %i", rect->right, rect->bottom); return V3_OK; } @@ -300,6 +301,11 @@ public: uint minimumWidth, minimumHeight; bool keepAspectRatio; fUI.getGeometryConstraints(minimumWidth, minimumHeight, keepAspectRatio); +#ifdef DISTRHO_OS_MAC + const double scaleFactor = fUI.getScaleFactor(); + minimumWidth /= scaleFactor; + minimumHeight /= scaleFactor; +#endif applyGeometryConstraints(minimumWidth, minimumHeight, keepAspectRatio, rect); return V3_TRUE; } @@ -1298,7 +1304,7 @@ struct dpf_plugin_view : v3_plugin_view_cpp { #endif rect->right = view->nextWidth; rect->bottom = view->nextHeight; - tmpUI.quit(); + d_stdout("dpf_plugin_view::get_size => %p | next size %u %u with scale factor %f", self, view->nextWidth, view->nextHeight, lastScaleFactor); return V3_OK; } @@ -1377,7 +1383,11 @@ struct dpf_plugin_view : v3_plugin_view_cpp { uint minimumWidth, minimumHeight; bool keepAspectRatio; tmpUI.getGeometryConstraints(minimumWidth, minimumHeight, keepAspectRatio); - tmpUI.quit(); +#ifdef DISTRHO_OS_MAC + const double scaleFactor = tmpUI.getScaleFactor(); + minimumWidth /= scaleFactor; + minimumHeight /= scaleFactor; +#endif applyGeometryConstraints(minimumWidth, minimumHeight, keepAspectRatio, rect); return V3_TRUE; }