DPF

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

commit 34d1547e311ba675a59040d65128167cf8c48a24
parent 0441f995d4af201e6ab97881047972e2bba21bfa
Author: falkTX <falktx@falktx.com>
Date:   Sat, 10 Sep 2022 00:32:11 +0100

Fix default UI size after introducing the initial size macros

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdistrho/src/DistrhoUI.cpp | 38++++++++++++++++++++++++++++++--------
Mdistrho/src/DistrhoUIPrivateData.hpp | 4++--
2 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/distrho/src/DistrhoUI.cpp b/distrho/src/DistrhoUI.cpp @@ -174,28 +174,44 @@ ExternalWindow::PrivateData #else PluginWindow& #endif -UI::PrivateData::createNextWindow(UI* const ui, const uint width, const uint height) +UI::PrivateData::createNextWindow(UI* const ui, uint width, uint height, const bool adjustForScaleFactor) { UI::PrivateData* const pData = s_nextPrivateData; -#if DISTRHO_PLUGIN_HAS_EXTERNAL_UI + #if DISTRHO_PLUGIN_HAS_EXTERNAL_UI + const double scaleFactor = d_isNotZero(pData->scaleFactor) ? pData->scaleFactor : getDesktopScaleFactor(pData->winId); + + if (adjustForScaleFactor && d_isNotZero(scaleFactor) && d_isNotEqual(scaleFactor, 1.0)) + { + width *= scaleFactor; + height *= scaleFactor; + } + pData->window = new PluginWindow(ui, pData->app); ExternalWindow::PrivateData ewData; ewData.parentWindowHandle = pData->winId; ewData.width = width; ewData.height = height; - ewData.scaleFactor = pData->scaleFactor != 0.0 ? pData->scaleFactor : getDesktopScaleFactor(pData->winId); + ewData.scaleFactor = scaleFactor; ewData.title = DISTRHO_PLUGIN_NAME; ewData.isStandalone = DISTRHO_UI_IS_STANDALONE; return ewData; -#else - pData->window = new PluginWindow(ui, pData->app, pData->winId, width, height, pData->scaleFactor); + #else + const double scaleFactor = pData->scaleFactor; + + if (adjustForScaleFactor && d_isNotZero(scaleFactor) && d_isNotEqual(scaleFactor, 1.0)) + { + width *= scaleFactor; + height *= scaleFactor; + } + + pData->window = new PluginWindow(ui, pData->app, pData->winId, width, height, scaleFactor); // If there are no callbacks, this is most likely a temporary window, so ignore idle callbacks if (pData->callbacksPtr == nullptr) pData->window->setIgnoreIdleCallbacks(); return pData->window.getObject(); -#endif + #endif } /* ------------------------------------------------------------------------------------------------------------ @@ -207,10 +223,16 @@ UI::UI(const uint width, const uint height, const bool automaticallyScaleAndSetA width == 0 ? DISTRHO_UI_DEFAULT_WIDTH : #endif width, + #ifdef DISTRHO_UI_DEFAULT_HEIGHT + height == 0 ? DISTRHO_UI_DEFAULT_HEIGHT : + #endif + height, #ifdef DISTRHO_UI_DEFAULT_WIDTH - height == 0 ? DISTRHO_UI_DEFAULT_WIDTH : + width == 0 + #else + false #endif - height)), + )), uiData(UI::PrivateData::s_nextPrivateData) { #if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI diff --git a/distrho/src/DistrhoUIPrivateData.hpp b/distrho/src/DistrhoUIPrivateData.hpp @@ -424,9 +424,9 @@ struct UI::PrivateData { static UI::PrivateData* s_nextPrivateData; #if DISTRHO_PLUGIN_HAS_EXTERNAL_UI - static ExternalWindow::PrivateData createNextWindow(UI* ui, uint width, uint height); + static ExternalWindow::PrivateData createNextWindow(UI* ui, uint width, uint height, bool adjustForScaleFactor); #else - static PluginWindow& createNextWindow(UI* ui, uint width, uint height); + static PluginWindow& createNextWindow(UI* ui, uint width, uint height, bool adjustForScaleFactor); #endif };