mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
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:
co-authored by
Claude Opus 4.8
parent
af1352b1e6
commit
05bb68ac58
+5
-6
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user