From cf67a66120653554af4186d1440d29ce8d2e9216 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Wed, 8 Jul 2026 15:37:03 +0300 Subject: [PATCH] =?UTF-8?q?feat(slices):=20=D0=BC=D0=B0=D1=80=D0=BA=D0=B5?= =?UTF-8?q?=D1=80=D1=8B=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BE=D0=BA=D1=80=D0=B0=D1=88=D0=B8=D0=B2=D0=B0=D1=8E=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=B2=20=D1=86=D0=B2=D0=B5=D1=82=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=B9=D0=B4=D0=B6=D0=B0=20=D1=81=D0=B2=D0=BE=D0=B5=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=81=D0=BB=D0=B0=D0=B9=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Полоса фильтра, края и линия несущей теперь берут цвет из SliceColor(SliceLetter) вместо захардкоженного янтарного, который совпадал с бейджем слайса B. Каждый слайс (B/C/D…) получает свой оттенок. Co-Authored-By: Claude Opus 4.8 --- SpectrumView.pas | 17 +++++++++-------- SpectrumViewOpengl.pas | 14 +++++++------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/SpectrumView.pas b/SpectrumView.pas index 9e1012b..b875d53 100644 --- a/SpectrumView.pas +++ b/SpectrumView.pas @@ -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)); diff --git a/SpectrumViewOpengl.pas b/SpectrumViewOpengl.pas index cb90a53..c7b85ab 100644 --- a/SpectrumViewOpengl.pas +++ b/SpectrumViewOpengl.pas @@ -605,23 +605,23 @@ begin end; // Маркер фильтра каждого слайса (B+) на спектре: полупрозрачная полоса -// пропускания + центральная несущая. Цвет янтарный — отличить от главного. +// пропускания + центральная несущая. Цвет — по букве слайса (как его бейдж). procedure TSpectrumViewOpenGL.DrawSliceFilterMarkers(W, H: Integer); -const - SLICE_CLR = TColor($0010A8F0); // янтарный (BGR), как акцент TX-select флага var i, SX1, SX2, SVfoX: Integer; O: TVfoOverlay; + Clr: TColor; begin for i := 0 to SliceOverlayCount - 1 do begin O := SliceOverlayAt(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); - if SX2 > SX1 then DrawRect(SX1, 0, SX2, H, SLICE_CLR, 60 / 255); - DrawLine(SX1, 0, SX1, H, SLICE_CLR, 1, False); - DrawLine(SX2, 0, SX2, H, SLICE_CLR, 1, False); - DrawLine(SVfoX, 0, SVfoX, H - 12, SLICE_CLR, 2, False); + if SX2 > SX1 then DrawRect(SX1, 0, SX2, H, Clr, 60 / 255); + DrawLine(SX1, 0, SX1, H, Clr, 1, False); + DrawLine(SX2, 0, SX2, H, Clr, 1, False); + DrawLine(SVfoX, 0, SVfoX, H - 12, Clr, 2, False); DrawBandLetterGL(SX1, SX2, O.SliceLetter); end; end;