diff options
author | falkTX <falktx@gmail.com> | 2018-09-30 16:48:43 +0200 |
---|---|---|
committer | falkTX <falktx@gmail.com> | 2018-09-30 16:48:43 +0200 |
commit | b526e381cc065e44dc8ec7620c1725b203a3ee85 (patch) | |
tree | 8992bd1fd4365a4179138087ee3869a5feb3cf48 | |
parent | a1748a1a9fd1ac6f8b8abaa26cec64f121d13d7e (diff) |
Fix recursive resizing in certain DAWs
-rw-r--r-- | distrho/src/DistrhoUI.cpp | 3 | ||||
-rw-r--r-- | distrho/src/DistrhoUIInternal.hpp | 15 |
2 files changed, 14 insertions, 4 deletions
diff --git a/distrho/src/DistrhoUI.cpp b/distrho/src/DistrhoUI.cpp index f83d0775..c590ce9b 100644 --- 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 index 00599122..06d5d5a5 100644 --- 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; } |