From 43dbd2b829b1b030f3fe5881325105149836124c Mon Sep 17 00:00:00 2001 From: Vladimir Date: Wed, 1 Jul 2026 14:14:16 +0300 Subject: [PATCH] fix(overlay): S-meter scale + header badge polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- VfoOverlay.pas | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/VfoOverlay.pas b/VfoOverlay.pas index 60bcfac..1c4acf4 100644 --- a/VfoOverlay.pas +++ b/VfoOverlay.pas @@ -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);