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:
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;
}