summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfalkTX <falktx@gmail.com>2018-09-30 16:48:43 +0200
committerfalkTX <falktx@gmail.com>2018-09-30 16:48:43 +0200
commitb526e381cc065e44dc8ec7620c1725b203a3ee85 (patch)
tree8992bd1fd4365a4179138087ee3869a5feb3cf48
parenta1748a1a9fd1ac6f8b8abaa26cec64f121d13d7e (diff)
Fix recursive resizing in certain DAWs
-rw-r--r--distrho/src/DistrhoUI.cpp3
-rw-r--r--distrho/src/DistrhoUIInternal.hpp15
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;
}