fix(display): смена банда не замораживает спектр/водопад ~0.7с

SetZoomPan вызывался из RestoreBand безусловно и переармировал RX-анализатор
(SetAnalyzer = сброс FFT-истории) даже когда zoom/pan не менялись — дисплей
замирал на время наполнения окна. Теперь no-op guard: без изменений выходим
без переарма.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 22:56:34 +03:00
co-authored by Claude Fable 5
parent 3db823474d
commit dae0c19375
+11 -2
View File
@@ -1439,9 +1439,18 @@ end;
procedure TWDSPEngine.SetZoomPan(AZoom, APan: Double); procedure TWDSPEngine.SetZoomPan(AZoom, APan: Double);
// Задаёт зум/пан и переармирует RX-анализатор (SetAnalyzer внутри WDSP // Задаёт зум/пан и переармирует RX-анализатор (SetAnalyzer внутри WDSP
// защищён собственной критической секцией, дисплей-поток не мешает). // защищён собственной критической секцией, дисплей-поток не мешает).
var
NZ, NP: Double;
begin begin
FZoomFactor := EnsureRange(AZoom, 0.0, 1.0); NZ := EnsureRange(AZoom, 0.0, 1.0);
FPanSlider := EnsureRange(APan, 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 if FAnalyzerOpen then
ApplyRXAnalyzerSettings; ApplyRXAnalyzerSettings;
end; end;