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