Fix ruler lag on click-to-tune and VFO change

ApplyVfoA (общий путь click-to-tune/wheel/VFO/band) синхронно дёргал
PbSpectrum.Invalidate, но не PbRuler.Invalidate — линейку обновлял лишь
таймер через NeedsRulerRedraw-гейт, отсюда "не всегда" при CTUN off.
Invalidate только планирует перерисовку (не тяжёлый рендер), а DrawRuler
дешёвый, поэтому дёргаем PbRuler.Invalidate сразу рядом с PbSpectrum.

Явная инвалидация Ruler из RestoreBand убрана как избыточная — band
идёт через ApplyVfoA, теперь единый источник правды там.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Uladzimir Karpenka
2026-06-04 16:15:03 +03:00
co-authored by Claude Opus 4.8
parent af1352b1e6
commit 05bb68ac58
+5 -6
View File
@@ -1032,13 +1032,8 @@ begin
// Пересчитываем drive byte для нового диапазона перед отправкой в сеть
FController.FDriveLevel := CalcDriveByte;
// ApplyVfoA обновит сеть, FreqDisp, shift, перерисует
// ApplyVfoA обновит сеть, FreqDisp, shift, Ruler — перерисует.
ApplyVfoA(Round(B.VfoA));
// Смена диапазона — дискретное событие (не wheel/drag), поэтому
// перерисовываем Ruler синхронно. ApplyVfoA откладывает рендер на таймер
// (FSpectrumDirty), что для оффлайна/без RUN не перерисовывает линейку.
FSpecView.InvalidateRulerCache;
if PbRuler <> nil then PbRuler.Invalidate;
end;
procedure TMainForm.SaveAllAndExit;
@@ -4732,9 +4727,13 @@ begin
// Не рисуем синхронно из wheel/drag path: частые события мыши иначе
// забивают UI-поток и мешают аудио. Таймер подхватит ближайший кадр.
// Сам DrawSpectrum/DrawWaterfall откладываем (FSpectrumDirty), но Invalidate
// дёргаем сразу — он лишь планирует перерисовку. Линейку (PbRuler) тоже:
// её рендер дешёвый и без него она отставала от спектра при клике/смене VFO.
SyncSpecViewFreq;
FSpectrumDirty := True;
PbSpectrum.Invalidate;
if PbRuler <> nil then PbRuler.Invalidate;
if Scrolled then
begin
FWaterfallDirty := True;