ui(spectrum): полоса главного фильтра — как у слайсов, со своим оттенком

Главный фильтр рисовался иначе, чем слайсовые полосы, причём в CPU-пути
сильнее, чем в GL.

1. Порядок отрисовки. Кромки, несущая и её треугольник у главного шли ПОСЛЕ
   кривой спектра, у слайсов — до неё, а в GL-вьюхе весь блок фильтров идёт
   перед DrawSpectrumCurve. Из-за этого на CPU главная полоса единственная
   лезла поверх сигнала и выглядела жирнее и ярче слайсовых при тех же цвете и
   толщине линий. Блок перенесён к слайсам, до кривой: порядок кадра теперь
   одинаков у обоих путей.

2. Заливка. Была НЕПРОЗРАЧНОЙ, рядом с просвечивающими слайсовыми смотрелась
   плотным блоком. Теперь та же полупрозрачность, что у слайсов; прозрачность
   вынесена в общие SPEC_BAND_ALPHA/SPEC_BAND_ALPHA_TX (VfoOverlay, рядом с
   палитрой слайсов) — раньше это были четыре магических числа по двум вьюхам.
   Осиротевшая FillBandRaw удалена.

3. Цвет. С полупрозрачностью полоса перестала читаться: SpecFilter (34,78,106)
   почти совпадает с нижним цветом фонового градиента спектра (31,79,108), и
   заливка давала не оттенок, а затемнение — над низом градиента выходило
   ровно (32,79,108), то есть фон. Полосе дан свой цвет темы SpecFilterBand:
   тёплый янтарь RGB(255,150,40) на тёмной (фон сине-стальной, тёплое на нём
   читается) и насыщённый зелёный RGB(60,150,60) на светлой. SpecFilter
   остался подложкой подписей AGC — иначе перекрасились бы и они.

4. Слайс B перекрашен из оранжевого в васильковый RGB(97,118,255): с янтарной
   полосой главного фильтра оранжевый стал неразличим. Оттенок выбран по
   свободному месту в круге: заняты 0°(TX), 31°(полоса), 55°(E), 132°(A),
   190°(C), 195°(G), 276°(F), 308°(D); самый широкий промежуток 195..276°,
   середина ≈236°. Палитра одна на всё, поэтому вместе с полосой и несущей
   перекрашиваются буква слайса на спектре и бейдж во флаге VfoOverlay.

Сборка ewsdr (--ws=qt6) и ewsdrd — ОК. На экране не проверено: нужен эфир со
слайсами; цвета правятся одной строкой (SpecFilterBand в AppTheme,
SLICE_COLORS в VfoOverlay).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-14 23:14:59 +03:00
co-authored by Claude Opus 5
parent d0c82ade73
commit eb4af61fad
4 changed files with 61 additions and 61 deletions
+14 -1
View File
@@ -54,6 +54,12 @@ type
// Спектр — сигнал и маркеры
SpecLine: TColor;
SpecFilter: TColor;
// Заливка полосы главного фильтра. Отдельно от SpecFilter (тот остался
// подложкой подписей AGC): полоса теперь полупрозрачная, как у слайсов, и
// цвет ей нужен СВОЙ — SpecFilter почти совпадает с нижним цветом фонового
// градиента спектра, поэтому такая заливка читалась не оттенком, а
// затемнением.
SpecFilterBand: TColor;
SpecFilterEdge: TColor;
SpecAgcColor: TColor;
SpecAgcHangColor: TColor;
@@ -158,6 +164,10 @@ begin
Result.SpecGrid := TColor($00685624);
Result.SpecLine := TColor($0040FF80);
Result.SpecFilter := TColor($006A4E22);
// Оттенок полосы — тёплый янтарный, из семейства курсора VFO (Amber): фон
// спектра сине-стальной, поэтому янтарь на нём читается как оттенок, а не
// как «потемнее фона». RGB(255,150,40).
Result.SpecFilterBand := TColor($002896FF);
Result.SpecFilterEdge := TColor($0040FFCC);
Result.SpecAgcColor := TColor($0000AAFF);
Result.SpecAgcHangColor := TColor($00FFCC00);
@@ -266,7 +276,10 @@ begin
Result.SpecLabelText := TColor($00404038);
Result.SpecGrid := TColor($00B8B4A4);
Result.SpecLine := TColor($00006400); // тёмно-зелёная линия
Result.SpecFilter := TColor($00C8DCC8); // светло-зелёная полоса фильтра
Result.SpecFilter := TColor($00C8DCC8); // подложка подписей AGC
// Полоса фильтра на светлой теме: насыщённее фона (тот пергаментный), иначе
// при той же полупрозрачности её не видно. RGB(60,150,60).
Result.SpecFilterBand := TColor($003C963C);
Result.SpecFilterEdge := TColor($00407840);
Result.SpecAgcColor := TColor($00904000); // тёмно-оранжевый AGC
Result.SpecAgcHangColor := TColor($00802000);