feat(slices): per-pan дисплей — палитра/gamma/уровни на пан («◑»-поповер)

Кнопка «◑» в шапке каждого пана открывает компактный поповер настроек
отображения (палитра, gamma, ref/range спектра, авто-уровень водопада +
offset/ручные min-max). Модель «глобальный дефолт + override на пан»: пан 0
правит глобальные поля рендера (зеркалятся в контроллер), паны N ставят
DisplayOverride и персистятся в воркспейс раздельно КВ/трансвертер.

- PanDisplayPopup.pas (new): borderless fsStayOnTop форма, гаснет по
  OnDeactivate; Flat*-контролы; крестик «×» закрытия; дим-хинт «правки
  применяются и сохраняются сами»; кнопки «⟳ Reset»/«⇄ Copy to all».
- TPanafallPanel: FBtnDisplay + OnDisplayClick + DisplayOverride;
  PositionHeaderChildren каскадит [×][⧉][◑] справа по Visible.
- MainForm: OnPanDisplayClick/Applied/Reset/ApplyAll + ApplyGlobalRenderToView
  + MarkPanDisplayDirty. При смене палитры/сбросе чистим историю GL-водопада
  (TSpectrumView.ClearWaterfall) — GL хранит уже раскрашенные пиксели.
- Settings/TPanCfg: под-объект 'display' (палитра/gamma/ref/range/wf-уровни),
  пишется только при override.

Глобальными осознанно оставлены разрешение анализатора, MSAA, скорость
водопада, детектор/усреднение (движок/перф, не косметика).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-13 13:49:19 +03:00
co-authored by Claude Opus 4.8
parent 543453007e
commit 3566f10191
6 changed files with 666 additions and 10 deletions
+9
View File
@@ -305,6 +305,7 @@ type
procedure InvalidateRulerCache; virtual;
procedure ResetSpectrumBuf; virtual;
procedure ResetWfAvgBuf; virtual;
procedure ClearWaterfall; // сброс истории водопада (смена палитры/gamma)
procedure FillDemoSpectrum; virtual;
function NeedsRulerRedraw: Boolean; virtual;
end;
@@ -1250,6 +1251,14 @@ begin
FWaterfall.ResetWfAvgBuf;
end;
procedure TSpectrumView.ClearWaterfall;
// Сброс истории водопада (GL: пересоздать текстуру). Нужен при смене палитры/
// gamma: GL-водопад хранит УЖЕ раскрашенные пиксели, старые строки иначе
// остаются в прежней палитре, и смена/сброс выглядят как «не сработало».
begin
FWaterfall.ResetWfBuf;
end;
procedure TSpectrumView.FillDemoSpectrum;
var i: Integer; FreqOff, Noise, Sig: Double; W: Integer;
begin