mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 19:45:09 +00:00
feat(slices): маркеры фильтров окрашиваются в цвет бейджа своего слайса
Полоса фильтра, края и линия несущей теперь берут цвет из SliceColor(SliceLetter) вместо захардкоженного янтарного, который совпадал с бейджем слайса B. Каждый слайс (B/C/D…) получает свой оттенок. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+9
-8
@@ -990,36 +990,37 @@ end;
|
|||||||
// и линии/буквы (canvas) разнесены по разным процедурам — их зовут из разных
|
// и линии/буквы (canvas) разнесены по разным процедурам — их зовут из разных
|
||||||
// фаз DrawSpectrum, чтобы не чередовать режимы доступа к битмапу.
|
// фаз DrawSpectrum, чтобы не чередовать режимы доступа к битмапу.
|
||||||
procedure TSpectrumView.DrawSliceFilterBands(W, H: Integer);
|
procedure TSpectrumView.DrawSliceFilterBands(W, H: Integer);
|
||||||
const
|
|
||||||
SLICE_R = $F0; SLICE_G = $A8; SLICE_B = $10; // янтарный (совпадает с SLICE_CLR в GL)
|
|
||||||
var
|
var
|
||||||
i, SX1, SX2, SVfoX: Integer;
|
i, SX1, SX2, SVfoX: Integer;
|
||||||
O: TVfoOverlay;
|
O: TVfoOverlay;
|
||||||
|
Clr: TColor;
|
||||||
begin
|
begin
|
||||||
for i := 0 to FSliceOverlays.Count - 1 do
|
for i := 0 to FSliceOverlays.Count - 1 do
|
||||||
begin
|
begin
|
||||||
O := TVfoOverlay(FSliceOverlays[i]);
|
O := TVfoOverlay(FSliceOverlays[i]);
|
||||||
if (O = nil) or (not O.Visible) then Continue;
|
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);
|
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;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSpectrumView.DrawSliceFilterLinesRaw(W, H: Integer);
|
procedure TSpectrumView.DrawSliceFilterLinesRaw(W, H: Integer);
|
||||||
const
|
|
||||||
SLICE_CLR = TColor($0010A8F0);
|
|
||||||
var
|
var
|
||||||
i, SX1, SX2, SVfoX: Integer;
|
i, SX1, SX2, SVfoX: Integer;
|
||||||
O: TVfoOverlay;
|
O: TVfoOverlay;
|
||||||
|
Clr: TColor;
|
||||||
begin
|
begin
|
||||||
for i := 0 to FSliceOverlays.Count - 1 do
|
for i := 0 to FSliceOverlays.Count - 1 do
|
||||||
begin
|
begin
|
||||||
O := TVfoOverlay(FSliceOverlays[i]);
|
O := TVfoOverlay(FSliceOverlays[i]);
|
||||||
if (O = nil) or (not O.Visible) then Continue;
|
if (O = nil) or (not O.Visible) then Continue;
|
||||||
|
Clr := SliceColor(O.SliceLetter); // оттенок бейджа слайса
|
||||||
CalcFilterBandXFor(O.DisplayVfoHz, O.DisplayMode, O.DisplayBW, W, SX1, SX2, SVfoX);
|
CalcFilterBandXFor(O.DisplayVfoHz, O.DisplayMode, O.DisplayBW, W, SX1, SX2, SVfoX);
|
||||||
RawVLine(SX1, 0, H - 1, SLICE_CLR);
|
RawVLine(SX1, 0, H - 1, Clr);
|
||||||
RawVLine(SX2, 0, H - 1, SLICE_CLR);
|
RawVLine(SX2, 0, H - 1, Clr);
|
||||||
RawVLine(SVfoX, 0, H - 13, SLICE_CLR, 2); // несущая (жирнее)
|
RawVLine(SVfoX, 0, H - 13, Clr, 2); // несущая (жирнее)
|
||||||
// Буква слайса внутри полосы фильтра сверху — привязка полосы к флагу,
|
// Буква слайса внутри полосы фильтра сверху — привязка полосы к флагу,
|
||||||
// цвет = цвет слайса (совпадает с бейджем во флаге).
|
// цвет = цвет слайса (совпадает с бейджем во флаге).
|
||||||
DrawBandLetterRaw(SX1, SX2, O.SliceLetter, SliceColor(O.SliceLetter));
|
DrawBandLetterRaw(SX1, SX2, O.SliceLetter, SliceColor(O.SliceLetter));
|
||||||
|
|||||||
@@ -605,23 +605,23 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
// Маркер фильтра каждого слайса (B+) на спектре: полупрозрачная полоса
|
// Маркер фильтра каждого слайса (B+) на спектре: полупрозрачная полоса
|
||||||
// пропускания + центральная несущая. Цвет янтарный — отличить от главного.
|
// пропускания + центральная несущая. Цвет — по букве слайса (как его бейдж).
|
||||||
procedure TSpectrumViewOpenGL.DrawSliceFilterMarkers(W, H: Integer);
|
procedure TSpectrumViewOpenGL.DrawSliceFilterMarkers(W, H: Integer);
|
||||||
const
|
|
||||||
SLICE_CLR = TColor($0010A8F0); // янтарный (BGR), как акцент TX-select флага
|
|
||||||
var
|
var
|
||||||
i, SX1, SX2, SVfoX: Integer;
|
i, SX1, SX2, SVfoX: Integer;
|
||||||
O: TVfoOverlay;
|
O: TVfoOverlay;
|
||||||
|
Clr: TColor;
|
||||||
begin
|
begin
|
||||||
for i := 0 to SliceOverlayCount - 1 do
|
for i := 0 to SliceOverlayCount - 1 do
|
||||||
begin
|
begin
|
||||||
O := SliceOverlayAt(i);
|
O := SliceOverlayAt(i);
|
||||||
if (O = nil) or (not O.Visible) then Continue;
|
if (O = nil) or (not O.Visible) then Continue;
|
||||||
|
Clr := SliceColor(O.SliceLetter); // оттенок бейджа слайса
|
||||||
CalcFilterBandXFor(O.DisplayVfoHz, O.DisplayMode, O.DisplayBW, W, SX1, SX2, SVfoX);
|
CalcFilterBandXFor(O.DisplayVfoHz, O.DisplayMode, O.DisplayBW, W, SX1, SX2, SVfoX);
|
||||||
if SX2 > SX1 then DrawRect(SX1, 0, SX2, H, SLICE_CLR, 60 / 255);
|
if SX2 > SX1 then DrawRect(SX1, 0, SX2, H, Clr, 60 / 255);
|
||||||
DrawLine(SX1, 0, SX1, H, SLICE_CLR, 1, False);
|
DrawLine(SX1, 0, SX1, H, Clr, 1, False);
|
||||||
DrawLine(SX2, 0, SX2, H, SLICE_CLR, 1, False);
|
DrawLine(SX2, 0, SX2, H, Clr, 1, False);
|
||||||
DrawLine(SVfoX, 0, SVfoX, H - 12, SLICE_CLR, 2, False);
|
DrawLine(SVfoX, 0, SVfoX, H - 12, Clr, 2, False);
|
||||||
DrawBandLetterGL(SX1, SX2, O.SliceLetter);
|
DrawBandLetterGL(SX1, SX2, O.SliceLetter);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|||||||
Reference in New Issue
Block a user