mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 19:45:09 +00:00
Render sample rate overlay into spectrum bitmap
This commit is contained in:
+35
-5
@@ -438,6 +438,7 @@ type
|
||||
procedure SetRadioOfflineStatus(const ConnText: string; ClearDevice: Boolean = False);
|
||||
procedure ApplyStatusTheme(const T: TAppTheme);
|
||||
procedure PositionSampleRateOverlay;
|
||||
procedure OnSampleRateOverlayInvalidate(Sender: TObject);
|
||||
procedure OnSampleRateSelect(SampleRate: Integer);
|
||||
procedure OnSampleRateHidePanel;
|
||||
procedure UpdateVfoDisplay;
|
||||
@@ -523,6 +524,7 @@ type
|
||||
X, Y: Integer);
|
||||
procedure PbSpectrumMouseUp(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
procedure PbSpectrumMouseLeave(Sender: TObject);
|
||||
procedure PbWaterfallMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
procedure PbWaterfallMouseMove(Sender: TObject; Shift: TShiftState;
|
||||
@@ -1929,10 +1931,11 @@ begin
|
||||
PanelRight.OnResize := RightPanelResize;
|
||||
|
||||
FSampleRateOverlay := TSampleRateOverlay.Create(Self);
|
||||
FSampleRateOverlay.Parent := PanelRight;
|
||||
FSampleRateOverlay.OnSpanSelect := OnSampleRateSelect;
|
||||
FSampleRateOverlay.OnHidePanel := OnSampleRateHidePanel;
|
||||
FSampleRateOverlay.OnInvalidate := OnSampleRateOverlayInvalidate;
|
||||
FSampleRateOverlay.SetCurrentRate(FSampleRate);
|
||||
FSpecView.SampleRateOverlay := FSampleRateOverlay;
|
||||
|
||||
// S-метр — внутри PanelToolbar, справа
|
||||
PanelSMeterRight := TPanel.Create(Self);
|
||||
@@ -1952,6 +1955,7 @@ begin
|
||||
PbSpectrum.OnDblClick := PbSpectrumDblClick;
|
||||
PbSpectrum.OnMouseMove := PbSpectrumMouseMove;
|
||||
PbSpectrum.OnMouseUp := PbSpectrumMouseUp;
|
||||
PbSpectrum.OnMouseLeave := PbSpectrumMouseLeave;
|
||||
|
||||
PbRuler := TPaintBox.Create(Self);
|
||||
PbRuler.Parent := PanelRight;
|
||||
@@ -2538,15 +2542,22 @@ end;
|
||||
|
||||
procedure TMainForm.PositionSampleRateOverlay;
|
||||
const
|
||||
MARGIN = 4;
|
||||
MARGIN_X = 34;
|
||||
MARGIN_Y = 4;
|
||||
begin
|
||||
if (FSampleRateOverlay = nil) or (PbSpectrum = nil) then Exit;
|
||||
FSampleRateOverlay.SetBounds(
|
||||
PbSpectrum.Left + MARGIN,
|
||||
PbSpectrum.Top + MARGIN,
|
||||
MARGIN_X,
|
||||
MARGIN_Y,
|
||||
FSampleRateOverlay.Width,
|
||||
FSampleRateOverlay.Height);
|
||||
FSampleRateOverlay.BringToFront;
|
||||
end;
|
||||
|
||||
procedure TMainForm.OnSampleRateOverlayInvalidate(Sender: TObject);
|
||||
begin
|
||||
FSpectrumDirty := True;
|
||||
if Assigned(FSpecView) then FSpecView.SpectrumDirty := True;
|
||||
if Assigned(PbSpectrum) then PbSpectrum.Invalidate;
|
||||
end;
|
||||
|
||||
// ===========================================================================
|
||||
@@ -4637,6 +4648,9 @@ end;
|
||||
procedure TMainForm.PbSpectrumMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
if Assigned(FSampleRateOverlay) and
|
||||
FSampleRateOverlay.HandleMouseDown(Button, X, Y) then Exit;
|
||||
|
||||
if Button = mbLeft then
|
||||
begin
|
||||
// Левая кнопка: сбрасываем маркер если активен
|
||||
@@ -4677,6 +4691,15 @@ end;
|
||||
procedure TMainForm.PbSpectrumMouseMove(Sender: TObject; Shift: TShiftState;
|
||||
X, Y: Integer);
|
||||
begin
|
||||
if Assigned(FSampleRateOverlay) then
|
||||
begin
|
||||
FSampleRateOverlay.HandleMouseMove(X, Y);
|
||||
if (FSampleRateOverlay.HotIdx >= 0) and (not FSpecDrag) then
|
||||
PbSpectrum.Cursor := crHandPoint
|
||||
else if not FSpecDrag then
|
||||
PbSpectrum.Cursor := crDefault;
|
||||
end;
|
||||
|
||||
if FSpecDrag and (ssLeft in Shift) then
|
||||
DoSpectrumDrag(X, PbSpectrum.Width);
|
||||
// Маркер следует за курсором — обновление произойдёт в ближайшем тике таймера (50ms)
|
||||
@@ -4699,6 +4722,13 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.PbSpectrumMouseLeave(Sender: TObject);
|
||||
begin
|
||||
if Assigned(FSampleRateOverlay) then
|
||||
FSampleRateOverlay.HandleMouseLeave;
|
||||
if not FSpecDrag then PbSpectrum.Cursor := crDefault;
|
||||
end;
|
||||
|
||||
// Водопад (аналогично)
|
||||
procedure TMainForm.PbWaterfallMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
|
||||
Reference in New Issue
Block a user