From dae0c193753e35eee5c014797ad2de66f4d59f12 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Sat, 11 Jul 2026 22:56:34 +0300 Subject: [PATCH] =?UTF-8?q?fix(display):=20=D1=81=D0=BC=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=B1=D0=B0=D0=BD=D0=B4=D0=B0=20=D0=BD=D0=B5=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=BE=D1=80=D0=B0=D0=B6=D0=B8=D0=B2=D0=B0=D0=B5=D1=82=20?= =?UTF-8?q?=D1=81=D0=BF=D0=B5=D0=BA=D1=82=D1=80/=D0=B2=D0=BE=D0=B4=D0=BE?= =?UTF-8?q?=D0=BF=D0=B0=D0=B4=20~0.7=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SetZoomPan вызывался из RestoreBand безусловно и переармировал RX-анализатор (SetAnalyzer = сброс FFT-истории) даже когда zoom/pan не менялись — дисплей замирал на время наполнения окна. Теперь no-op guard: без изменений выходим без переарма. Co-Authored-By: Claude Fable 5 --- WDSPEngine.pas | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/WDSPEngine.pas b/WDSPEngine.pas index 3b2dd82..7400e63 100644 --- a/WDSPEngine.pas +++ b/WDSPEngine.pas @@ -1439,9 +1439,18 @@ end; procedure TWDSPEngine.SetZoomPan(AZoom, APan: Double); // Задаёт зум/пан и переармирует RX-анализатор (SetAnalyzer внутри WDSP // защищён собственной критической секцией, дисплей-поток не мешает). +var + NZ, NP: Double; begin - FZoomFactor := EnsureRange(AZoom, 0.0, 1.0); - FPanSlider := EnsureRange(APan, 0.0, 1.0); + NZ := EnsureRange(AZoom, 0.0, 1.0); + NP := EnsureRange(APan, 0.0, 1.0); + // Без изменений — выходим БЕЗ переарма: SetAnalyzer сбрасывает FFT-историю, + // и спектр/водопад замирают на время наполнения окна (~0.7с @ 192к/131072). + // RestoreBand зовёт SetZoomPan безусловно — это било по КАЖДОЙ смене + // диапазона, даже когда зум обоих бандов одинаковый (обычно 0). + if (Abs(NZ - FZoomFactor) < 1E-9) and (Abs(NP - FPanSlider) < 1E-9) then Exit; + FZoomFactor := NZ; + FPanSlider := NP; if FAnalyzerOpen then ApplyRXAnalyzerSettings; end;