ui(2ton): читаемые IMD-маркеры на спектре

- сводка «IMD3 −NN dBc» слева от полосы фильтра (не прячется за
  SampleRateOverlay), шрифт 9→11
- маркеры пиков: все подписи в dBm как в Thetis (dBc только в сводке),
  все зелёные (оранжевый = вычисленная сводка), подпись центрирована
  над своим кружком (не наезжают у соседних тонов)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-18 09:59:50 +03:00
co-authored by Claude Fable 5
parent 7a999c95ee
commit e337f29314
2 changed files with 41 additions and 28 deletions
+16 -9
View File
@@ -842,7 +842,7 @@ const
CLR_IMD = TColor($000A8CFF); // оранжевый — продукты IMD3
var
M: array[0..3] of TIMDMarker;
N, i, X, Y, TX, TY: Integer;
N, i, X, Y, TX, TY, BX1, BX2, BVX: Integer;
Col: TColor;
begin
if FSpanHz <= 0 then Exit;
@@ -854,28 +854,35 @@ begin
X := Round((M[i].FreqHz - (FCenterFreq - FSpanHz / 2)) / FSpanHz * W);
if (X < 0) or (X >= W) then Continue;
Y := Max(0, Min(H - 1, Round((DBmax - M[i].LevelDB) * InvRange * H)));
if M[i].IsTone then Col := CLR_TONE else Col := CLR_IMD;
// Все маркеры зелёные (dBm-замеры); оранжевый — только вычисленная
// сводка dBc, чтобы цвета не путались.
Col := CLR_TONE;
DrawCircleGL(X, Y, 4.0, Col);
if (M[i].Caption <> FIMDLastText[i]) or FIMDLabelTex[i].Dirty then
begin
UploadText(FIMDLabelTex[i], M[i].Caption, Col, 7, True);
FIMDLastText[i] := M[i].Caption;
end;
TY := Y - 14;
if TY < 2 then TY := Y + 6;
TX := X + 6;
if TX + FIMDLabelTex[i].W >= W then TX := X - 6 - FIMDLabelTex[i].W;
// Подпись по центру над своим кружком; у верхней кромки — под ним.
TY := Y - 16;
if TY < 2 then TY := Y + 8;
TX := Max(2, Min(W - FIMDLabelTex[i].W - 2, X - FIMDLabelTex[i].W div 2));
DrawTexture(FIMDLabelTex[i], TX, TY);
end;
// Сводка в левом верхнем углу
// Сводка слева от полосы фильтра, чтобы не прятаться за SampleRateOverlay
// в левом верхнем углу и сразу бросаться в глаза рядом с сигналом.
if FIMDSummary <> '' then
begin
if (FIMDSummary <> FIMDLastText[4]) or FIMDLabelTex[4].Dirty then
begin
UploadText(FIMDLabelTex[4], FIMDSummary, CLR_IMD, 9, True);
UploadText(FIMDLabelTex[4], FIMDSummary, CLR_IMD, 11, True);
FIMDLastText[4] := FIMDSummary;
end;
DrawTexture(FIMDLabelTex[4], 6, 6);
if FActiveVfo = 0 then CalcFilterBandX(FVfoA, W, BX1, BX2, BVX)
else CalcFilterBandX(FVfoB, W, BX1, BX2, BVX);
TX := Max(2, Min(W - FIMDLabelTex[4].W - 2,
BX1 - FIMDLabelTex[4].W - 8));
DrawTexture(FIMDLabelTex[4], TX, 6);
end;
end;