DPF

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

commit b526e381cc065e44dc8ec7620c1725b203a3ee85
parent a1748a1a9fd1ac6f8b8abaa26cec64f121d13d7e
Author: falkTX <falktx@gmail.com>
Date:   Sun, 30 Sep 2018 16:48:16 +0200

Fix recursive resizing in certain DAWs

Diffstat:
Mdistrho/src/DistrhoUI.cpp | 3+++
Mdistrho/src/DistrhoUIInternal.hpp | 15+++++++++++----
2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/distrho/src/DistrhoUI.cpp b/distrho/src/DistrhoUI.cpp @@ -165,6 +165,9 @@ void UI::uiReshape(uint width, uint height) void UI::onResize(const ResizeEvent& ev) { + if (pData->resizeInProgress) + return; + pData->setSizeCallback(ev.size.getWidth(), ev.size.getHeight()); } #endif diff --git a/distrho/src/DistrhoUIInternal.hpp b/distrho/src/DistrhoUIInternal.hpp @@ -63,6 +63,7 @@ struct UI::PrivateData { // UI const bool userResizable; bool automaticallyScale; + bool resizeInProgress; uint minWidth; uint minHeight; @@ -82,6 +83,7 @@ struct UI::PrivateData { #endif userResizable(resizable), automaticallyScale(false), + resizeInProgress(false), minWidth(0), minHeight(0), callbacksPtr(nullptr), @@ -191,16 +193,21 @@ protected: void onReshape(uint width, uint height) override { DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - DISTRHO_SAFE_ASSERT_RETURN(fUI->pData != nullptr,); - if (fUI->pData->automaticallyScale) + UI::PrivateData* const pData = fUI->pData; + DISTRHO_SAFE_ASSERT_RETURN(pData != nullptr,); + + if (pData->automaticallyScale) { - const double scaleHorizontal = static_cast<double>(width) / static_cast<double>(fUI->pData->minWidth); - const double scaleVertical = static_cast<double>(height) / static_cast<double>(fUI->pData->minHeight); + const double scaleHorizontal = static_cast<double>(width) / static_cast<double>(pData->minWidth); + const double scaleVertical = static_cast<double>(height) / static_cast<double>(pData->minHeight); setScaling(scaleHorizontal < scaleVertical ? scaleHorizontal : scaleVertical); } + pData->resizeInProgress = true; fUI->setSize(width, height); + pData->resizeInProgress = false; + fUI->uiReshape(width, height); fIsReady = true; }