Fix ruler not redrawing on CTun toggle and band switch

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 <noreply@anthropic.com>
This commit is contained in:
Uladzimir Karpenka
2026-06-04 16:09:21 +03:00
co-authored by Claude Opus 4.8
parent 2e4cd3cc65
commit af1352b1e6
+7
View File
@@ -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;