mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
ui(tx): треугольник пилюли профиля выровнен по надписи
Треугольник центрировался по прямоугольнику пилюли, а текст — по TextHeight, который включает выносные элементы вниз. В подписи одни заглавные, они сидят в верхней части бокса, поэтому треугольник визуально проваливался: по пикселям текст занимал строки 7..13, треугольник 11..15. Считаем от метрики самой надписи (TxtY + TextHeight div 2 - 2), а не от бокса, чтобы выравнивание пережило смену шрифта или кегля. После правки текст 7..13, треугольник 8..12. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+11
-6
@@ -1236,7 +1236,7 @@ procedure TVfoOverlay.DrawSelf(C: TCanvas; W, H: Integer);
|
||||
var
|
||||
FreqStr, SStr, BWStr, DMRStr, TxStr, PStr: string;
|
||||
CurY, X, RW, i, DMRX, DMRRight, TxRight, TxW: Integer;
|
||||
ProfLeft, ProfRight, ProfW: Integer;
|
||||
ProfLeft, ProfRight, ProfW, TxtY, TriY: Integer;
|
||||
R: TRect;
|
||||
Tri3: array[0..2] of TPoint;
|
||||
BarL, BarW, MeterX: Integer;
|
||||
@@ -1347,14 +1347,19 @@ begin
|
||||
C.Brush.Style := bsClear;
|
||||
while (Length(PStr) > 1) and (C.TextWidth(PStr) > ProfW - 14) do
|
||||
SetLength(PStr, Length(PStr) - 1);
|
||||
C.TextOut(R.Left + 4, R.Top + (HDR_BADGE_H - C.TextHeight('A')) div 2, PStr);
|
||||
TxtY := R.Top + (HDR_BADGE_H - C.TextHeight('A')) div 2;
|
||||
C.TextOut(R.Left + 4, TxtY, PStr);
|
||||
// Треугольник «список» справа — рисуем, а не пишем: в Courier New
|
||||
// юникодных стрелок может не оказаться.
|
||||
// юникодных стрелок может не оказаться. Центрируем не по прямоугольнику
|
||||
// текста, а по САМИМ буквам: TextHeight включает выносные элементы, а в
|
||||
// подписи одни заглавные, они сидят в верхней части бокса — иначе
|
||||
// треугольник визуально проваливается ниже надписи.
|
||||
TriY := TxtY + C.TextHeight('A') div 2 - 2;
|
||||
C.Brush.Color := C.Font.Color; C.Brush.Style := bsSolid;
|
||||
C.Pen.Color := C.Font.Color;
|
||||
Tri3[0] := Point(R.Right - 9, CurY + 5);
|
||||
Tri3[1] := Point(R.Right - 3, CurY + 5);
|
||||
Tri3[2] := Point(R.Right - 6, CurY + 9);
|
||||
Tri3[0] := Point(R.Right - 9, TriY - 2);
|
||||
Tri3[1] := Point(R.Right - 3, TriY - 2);
|
||||
Tri3[2] := Point(R.Right - 6, TriY + 2);
|
||||
C.Polygon(Tri3);
|
||||
C.Font.Size := 8;
|
||||
RegisterHit(R, HIT_TXPROF);
|
||||
|
||||
Reference in New Issue
Block a user