fix(overlay): S-meter scale + header badge polish

- S-метр: убрана метка +60 (вылезала за правый край), шрифт подписей
  5→7 (читаемость), подписи сдвинуты ниже тика. Бар оставлен компактным,
  ряду добавлено 3px под крупные метки.
- Градиент S-метра привязан к уровню dBm (S1→S7→S9→S9+18), а не к длине
  бара — сильные сигналы уходят в красный раньше.
- Бейджи A/SPLIT/TX: высота 15→12px (верх на месте, низ приподнят) —
  текст по центру, больше зазор до S-метра.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-01 14:14:16 +03:00
co-authored by Claude Opus 4.8
parent 4a92256e72
commit 43dbd2b829
+10 -8
View File
@@ -163,7 +163,8 @@ const
// Геометрия карточки
PAD = 6;
HDR_H = 16;
MET_H = 18;
HDR_BADGE_H = 12; // высота бейджей A/SPLIT/TX (верх на CurY, низ приподнят)
MET_H = 21;
FRQ_H = 26;
BAR_H = 24;
ROW_H = 20;
@@ -518,7 +519,7 @@ var
I, BarEnd, PX, BarH, TW, Col: Integer;
T: Double;
begin
BarH := BH - 9;
BarH := BH - 12;
C.Brush.Color := CLR_BAR_BG;
C.Brush.Style := bsSolid;
C.Pen.Style := psClear;
@@ -543,9 +544,10 @@ begin
C.Rectangle(X, Y, X+BW, Y+BarH);
C.Font.Name := 'Courier New';
C.Font.Size := 5;
C.Font.Size := 7;
C.Font.Style := [];
for I := 0 to High(S_POS) do
// Последнюю метку (+60 = правый край) не рисуем — вылезает за границу.
for I := 0 to High(S_POS) - 1 do
begin
T := (S_POS[I] - DB_MIN) / (DB_MAX - DB_MIN);
PX := X + Round(T * BW);
@@ -553,7 +555,7 @@ begin
if I < 4 then C.Font.Color := CLR_DIM else C.Font.Color := CLR_ACCENT;
C.Pen.Color := CLR_DIM;
C.MoveTo(PX, Y+BarH); C.LineTo(PX, Y+BarH+2);
C.TextOut(PX - TW div 2, Y+BarH+1, S_LBL[I]);
C.TextOut(PX - TW div 2, Y+BarH+2, S_LBL[I]);
end;
end;
@@ -701,7 +703,7 @@ begin
CurY := PAD;
{ --- Шапка: [A] BW ... SPLIT [TX] --- }
DrawBadge(C, Rect(X, CurY, X+16, CurY+HDR_H-1), FSlice, CLR_ACCENT, CLR_CARD_BG);
DrawBadge(C, Rect(X, CurY, X+16, CurY+HDR_BADGE_H), FSlice, CLR_ACCENT, CLR_CARD_BG);
// ширина фильтра
if FFilterBW >= 1000 then BWStr := Format('%.1fk', [FFilterBW/1000.0])
else BWStr := IntToStr(FFilterBW);
@@ -709,11 +711,11 @@ begin
C.Font.Color := CLR_DIM; C.Brush.Style := bsClear;
C.TextOut(X + 22, CurY + 1, BWStr);
// TX badge (правый край)
R := Rect(W - PAD - 26, CurY, W - PAD, CurY + HDR_H - 1);
R := Rect(W - PAD - 26, CurY, W - PAD, CurY + HDR_BADGE_H);
if FTx then DrawBadge(C, R, 'TX', CLR_TX_ON, clWhite)
else DrawBadge(C, R, 'TX', CLR_BTN_NORM, CLR_DIM);
// SPLIT (левее TX) — кликабельно
R := Rect(W - PAD - 26 - 44, CurY, W - PAD - 26 - 4, CurY + HDR_H - 1);
R := Rect(W - PAD - 26 - 44, CurY, W - PAD - 26 - 4, CurY + HDR_BADGE_H);
if FSplit then DrawBadge(C, R, 'SPLIT', CLR_SPLIT_ON, CLR_CARD_BG)
else DrawBadge(C, R, 'SPLIT', CLR_BTN_NORM, CLR_DIM);
RegisterHit(R, HIT_SPLIT);