docs(slices): record flag UI polish (packing, band letters, theming)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 14:20:58 +03:00
co-authored by Claude Opus 4.8
parent a3ac459abc
commit db2aafaef9
+20 -4
View File
@@ -1,8 +1,9 @@
# Мультислайсы (несколько приёмных фильтров, как во FlexRadio) # Мультислайсы (несколько приёмных фильтров, как во FlexRadio)
Статус: **Этапы 1 + 2 РЕАЛИЗОВАНЫ и ЗАКОММИЧЕНЫ** (ветка `feature/multislice`, Статус: **Этапы 1 + 2 РЕАЛИЗОВАНЫ и ЗАКОММИЧЕНЫ** (ветка `feature/multislice`,
коммит `1527b0f`; проверено на эфире). Этап 3 (аппаратные DDC для слайса вне коммит `1527b0f`; проверено на эфире) + UI-полировка флагов (`30a6616`,
захваченной полосы) — не начат. Ниже: что вошло по факту + дизайн/остаток. `3049f91`, `a3ac459`). Этап 3 (аппаратные DDC для слайса вне захваченной
полосы) — не начат. Ниже: что вошло по факту + дизайн/остаток.
## Что реализовано (Этапы 1 + 2) ## Что реализовано (Этапы 1 + 2)
@@ -17,10 +18,25 @@
Буквы доп. слайсов начинаются с `'B'` (A = главный приёмник). Буквы доп. слайсов начинаются с `'B'` (A = главный приёмник).
- **UI** — по флагу `TVfoOverlay` на слайс (буква-бейдж, «×», fly-out MODE/DSP/AUD, - **UI** — по флагу `TVfoOverlay` на слайс (буква-бейдж, «×», fly-out MODE/DSP/AUD,
vol/mute/split/TX, S-метр), маркеры полосы фильтра слайса в **обоих** рендерерах vol/mute/split/TX, S-метр), маркеры полосы фильтра слайса в **обоих** рендерерах
(GL `DrawSliceFilterMarkers` + CPU), drag-ретюн несущей, колесо над флагом, (GL `DrawSliceFilterMarkers` + CPU), drag-ретюн несущей, колесо над флагом.
позиционирование СБОКУ от полосы фильтра с флипом (как у главного флага).
Ctrl+ЛКМ по спектру = добавить слайс. Флаг главного (A) виден когда скрыта Ctrl+ЛКМ по спектру = добавить слайс. Флаг главного (A) виден когда скрыта
левая панель ЛИБО есть слайсы B+ (синхронизируется с правками с левой панели). левая панель ЛИБО есть слайсы B+ (синхронизируется с правками с левой панели).
- **UI-полировка флагов** (`30a6616`, `3049f91`, `a3ac459`):
- `MainForm.LayoutFlags` — единый packing всех флагов (A+B+) в один ряд: каждый
рядом со своей полосой фильтра, но флаги НЕ наезжают (сосед слева толкает
правого; обратный поджим при выходе за правый край). `PositionVfoOverlay`/
`PositionSliceFlags` — тонкие обёртки над ним.
- Идентификация уехавшего флага — буквой слайса по центру его полосы фильтра
сверху (`DrawBandLetter` CPU + `DrawBandLetterGL` GL с кэшем текстур букв);
у главного A буква только когда есть слайсы.
- Палитра слайсов `VfoOverlay.SliceColor(L)` (A зелёный … F фиолетовый, не
красный — не путать с TX): один цвет для бейджа-буквы во флаге и для буквы
на полосе.
- Кнопки флага — общий `FlatButton.PaintFlatButton` (плоские, как левая
панель; без «стеклянного» градиента), центровка бейджа через `TextRect`.
- Флаг полностью тематизирован: структурные `CLR_*` выводятся из `TAppTheme`
(`ApplyThemeColors`), тема раздаётся из `ApplyDarkTheme` + `WireOverlayEvents`.
Статус-акценты (TX/SPLIT) фиксированы намеренно.
- **Перф** — S-метр развязан с кэшем «хрома» флага (`FMeterDirty` + meter-only - **Перф** — S-метр развязан с кэшем «хрома» флага (`FMeterDirty` + meter-only
`RefreshMeter` через `EnsureRendered`); `InvalidateVfoOverlay` не дёргает `RefreshMeter` через `EnsureRendered`); `InvalidateVfoOverlay` не дёргает
глобальный перезалив оверлеев на тик метра. глобальный перезалив оверлеев на тик метра.