From af1352b1e69535aa4295ed7efb3b7089d0ea8753 Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Thu, 4 Jun 2026 16:09:21 +0300 Subject: [PATCH] Fix ruler not redrawing on CTun toggle and band switch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ruler (PbRuler) — отдельный paintbox, перерисовывается только по PbRuler.Invalidate. Дискретные события его не дёргали: - CTun toggle (batch 7): OnControllerState(rfCTun) рисовал спектр/водопад, но не линейку. Добавлен InvalidateRulerCache + PbRuler.Invalidate. - Смена диапазона: RestoreBand -> ApplyVfoA, а ApplyVfoA намеренно откладывает рендер на таймер (FSpectrumDirty) ради wheel/drag — что для оффлайна/без RUN не перерисовывало линейку. Добавлена синхронная инвалидация Ruler в конце RestoreBand (дискретное событие, флуда нет). Co-Authored-By: Claude Opus 4.8 --- MainForm.pas | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MainForm.pas b/MainForm.pas index e213000..e7c1770 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -1034,6 +1034,11 @@ begin FController.FDriveLevel := CalcDriveByte; // ApplyVfoA обновит сеть, FreqDisp, shift, перерисует ApplyVfoA(Round(B.VfoA)); + // Смена диапазона — дискретное событие (не wheel/drag), поэтому + // перерисовываем Ruler синхронно. ApplyVfoA откладывает рендер на таймер + // (FSpectrumDirty), что для оффлайна/без RUN не перерисовывает линейку. + FSpecView.InvalidateRulerCache; + if PbRuler <> nil then PbRuler.Invalidate; end; procedure TMainForm.SaveAllAndExit; @@ -1447,11 +1452,13 @@ begin rfCTun: begin StyleButton(BtnCTun, FController.FCTun); + FSpecView.InvalidateRulerCache; SyncSpecViewFreq; FSpecView.DrawSpectrum; FSpecView.DrawWaterfall; PbSpectrum.Invalidate; PbWaterfall.Invalidate; + if PbRuler <> nil then PbRuler.Invalidate; end; rfWfAGC: FSpecView.WfAGCEnabled := FController.FWfAGCEnabled;