feat(slices): маркеры фильтров окрашиваются в цвет бейджа своего слайса

Полоса фильтра, края и линия несущей теперь берут цвет из
SliceColor(SliceLetter) вместо захардкоженного янтарного, который
совпадал с бейджем слайса B. Каждый слайс (B/C/D…) получает свой оттенок.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-08 15:37:03 +03:00
co-authored by Claude Opus 4.8
parent b2b3339a2a
commit cf67a66120
2 changed files with 16 additions and 15 deletions
+9 -8
View File
@@ -990,36 +990,37 @@ end;
// и линии/буквы (canvas) разнесены по разным процедурам — их зовут из разных
// фаз DrawSpectrum, чтобы не чередовать режимы доступа к битмапу.
procedure TSpectrumView.DrawSliceFilterBands(W, H: Integer);
const
SLICE_R = $F0; SLICE_G = $A8; SLICE_B = $10; // янтарный (совпадает с SLICE_CLR в GL)
var
i, SX1, SX2, SVfoX: Integer;
O: TVfoOverlay;
Clr: TColor;
begin
for i := 0 to FSliceOverlays.Count - 1 do
begin
O := TVfoOverlay(FSliceOverlays[i]);
if (O = nil) or (not O.Visible) then Continue;
Clr := SliceColor(O.SliceLetter); // оттенок бейджа слайса ($00BBGGRR)
CalcFilterBandXFor(O.DisplayVfoHz, O.DisplayMode, O.DisplayBW, W, SX1, SX2, SVfoX);
if SX2 > SX1 then BlendBand(SX1, SX2, H, SLICE_R, SLICE_G, SLICE_B, 60);
if SX2 > SX1 then
BlendBand(SX1, SX2, H, Clr and $FF, (Clr shr 8) and $FF, (Clr shr 16) and $FF, 60);
end;
end;
procedure TSpectrumView.DrawSliceFilterLinesRaw(W, H: Integer);
const
SLICE_CLR = TColor($0010A8F0);
var
i, SX1, SX2, SVfoX: Integer;
O: TVfoOverlay;
Clr: TColor;
begin
for i := 0 to FSliceOverlays.Count - 1 do
begin
O := TVfoOverlay(FSliceOverlays[i]);
if (O = nil) or (not O.Visible) then Continue;
Clr := SliceColor(O.SliceLetter); // оттенок бейджа слайса
CalcFilterBandXFor(O.DisplayVfoHz, O.DisplayMode, O.DisplayBW, W, SX1, SX2, SVfoX);
RawVLine(SX1, 0, H - 1, SLICE_CLR);
RawVLine(SX2, 0, H - 1, SLICE_CLR);
RawVLine(SVfoX, 0, H - 13, SLICE_CLR, 2); // несущая (жирнее)
RawVLine(SX1, 0, H - 1, Clr);
RawVLine(SX2, 0, H - 1, Clr);
RawVLine(SVfoX, 0, H - 13, Clr, 2); // несущая (жирнее)
// Буква слайса внутри полосы фильтра сверху — привязка полосы к флагу,
// цвет = цвет слайса (совпадает с бейджем во флаге).
DrawBandLetterRaw(SX1, SX2, O.SliceLetter, SliceColor(O.SliceLetter));