fix(slices): красная полоса фильтра при TX — у передающего слайса, не у главного

- MainForm: TXOverlay главной вьюхи взводился по FTransmitting без учёта
  источника TX → красной становилась полоса главного VFO даже при передаче
  со слайса. Теперь TXOverlay = FTransmitting and (FTxSliceId = 0).
- VfoOverlay: публичный TxActive (FTx) — вьюхи знают, какой слайс передаёт.
- SpectrumView/SpectrumViewOpengl: полоса/края/несущая передающего слайса
  красные (alpha 100, как у главного при TX), иначе цвет бейджа слайса.
- Фикс цвета TX-полосы в GL: $00E03030 при ColorToRGB (младший байт = R)
  давал синий вместо красного; общая константа CLR_TX_BAND = $003030E0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-13 18:48:30 +03:00
co-authored by Claude Opus 4.8
parent 2474821739
commit a2e403af3d
4 changed files with 28 additions and 8 deletions
+10 -4
View File
@@ -118,6 +118,9 @@ implementation
const
KEY_COLOR = TColor($00FF00FF);
// Полоса фильтра передающего тракта (главный VFO или TX-слайс): красная.
// TColor = $00BBGGRR (ColorToRGB читает младший байт как R).
CLR_TX_BAND = TColor($003030E0);
function ClampI(V, Lo, Hi: Integer): Integer;
begin
@@ -582,9 +585,9 @@ begin
if X2 > X1 then DrawRect(X1, 0, X2, H, TColor($0030C030), 100 / 255);
if FTXVfoIndex = 0 then CalcFilterBandX(FVfoA, W, TXX1, TXX2, TXVfoX)
else CalcFilterBandX(FVfoB, W, TXX1, TXX2, TXVfoX);
if TXX2 > TXX1 then DrawRect(TXX1, 0, TXX2, H, TColor($00E03030), 100 / 255);
if TXX2 > TXX1 then DrawRect(TXX1, 0, TXX2, H, CLR_TX_BAND, 100 / 255);
end
else if X2 > X1 then DrawRect(X1, 0, X2, H, TColor($00E03030), 100 / 255);
else if X2 > X1 then DrawRect(X1, 0, X2, H, CLR_TX_BAND, 100 / 255);
end
else if X2 > X1 then
DrawRect(X1, 0, X2, H, FTheme.SpecFilter, 1);
@@ -621,9 +624,12 @@ begin
begin
O := SliceOverlayAt(i);
if (O = nil) or (not O.Visible) then Continue;
Clr := SliceColor(O.SliceLetter); // оттенок бейджа слайса
// Передающий слайс — красная полоса (как у главного при TX), иначе оттенок бейджа.
if O.TxActive then Clr := CLR_TX_BAND
else Clr := SliceColor(O.SliceLetter);
CalcFilterBandXFor(O.DisplayVfoHz, O.DisplayMode, O.DisplayBW, W, SX1, SX2, SVfoX);
if SX2 > SX1 then DrawRect(SX1, 0, SX2, H, Clr, 60 / 255);
if SX2 > SX1 then
DrawRect(SX1, 0, SX2, H, Clr, IfThen(O.TxActive, 100, 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);