diff --git a/dgl/src/Window.cpp b/dgl/src/Window.cpp index 146fffc7..d67ab2b4 100644 --- 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(pData->minWidth * scaleFactor + 0.5); - const uint minHeight = static_cast(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 index 7f26308c..7366be34 100644 --- 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 index b6c97a01..00df1209 100644 --- 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; }