From e118598f5763d29862cc3ff143e23a36868bffe4 Mon Sep 17 00:00:00 2001 From: AlexandreRouma Date: Wed, 10 Apr 2024 18:28:59 +0200 Subject: [PATCH] Fix waterfall size related crash described in #1230 --- core/src/gui/widgets/waterfall.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/core/src/gui/widgets/waterfall.cpp b/core/src/gui/widgets/waterfall.cpp index f2556905..8126ee6d 100644 --- a/core/src/gui/widgets/waterfall.cpp +++ b/core/src/gui/widgets/waterfall.cpp @@ -717,18 +717,23 @@ namespace ImGui { void WaterFall::onResize() { std::lock_guard lck(latestFFTMtx); std::lock_guard lck2(smoothingBufMtx); - // return if widget is too small - if (widgetSize.x < 100 || widgetSize.y < 100) { - return; - } + // Check if the size is valid. This is because some settings might be changed before being first displayed. + if (widgetSize.x < 1.0f || widgetSize.y < 1.0f) { return; } + + // Set a minimim size + widgetSize.x = std::max(widgetSize.x, 100.0f*style::uiScale); + widgetSize.y = std::max(widgetSize.y, 100.0f*style::uiScale); + + // Save last height int lastWaterfallHeight = waterfallHeight; + // Compute sizes if (waterfallVisible) { FFTAreaHeight = std::min(FFTAreaHeight, widgetSize.y - (50.0f * style::uiScale)); newFFTAreaHeight = FFTAreaHeight; fftHeight = FFTAreaHeight - (50.0f * style::uiScale); - waterfallHeight = widgetSize.y - fftHeight - (50.0f * style::uiScale) - 2; + waterfallHeight = std::max(1, widgetSize.y - fftHeight - (50.0f * style::uiScale) - 2); } else { fftHeight = widgetSize.y - (50.0f * style::uiScale);