diff --git a/src/visual/SpectrumCanvas.cpp b/src/visual/SpectrumCanvas.cpp index c28ec1c..a2f268a 100644 --- a/src/visual/SpectrumCanvas.cpp +++ b/src/visual/SpectrumCanvas.cpp @@ -206,7 +206,7 @@ void SpectrumCanvas::OnMouseMoved(wxMouseEvent& event) { updateScaleFactor(scaleFactor); } else { if (scaleFactorEnabled) { - setStatusText("Drag horitontal to adjust center frequency. Right-drag to adjust vertical scale, click to reset. 'B' to toggle decibels display."); + setStatusText("Drag horizontal to adjust center frequency. Right-drag or SHIFT+UP/DOWN to adjust vertical scale; right-click to reset. 'B' to toggle decibels display."); } else { setStatusText("Displaying spectrum of active demodulator."); } @@ -247,6 +247,7 @@ SpectrumVisualDataQueue *SpectrumCanvas::getVisualDataQueue() { void SpectrumCanvas::OnMouseRightDown(wxMouseEvent& event) { mouseTracker.OnMouseRightDown(event); + scaleFactor = wxGetApp().getSpectrumProcessor()->getScaleFactor(); } void SpectrumCanvas::OnMouseRightReleased(wxMouseEvent& event) { diff --git a/src/visual/WaterfallCanvas.cpp b/src/visual/WaterfallCanvas.cpp index 8d48418..ea5e229 100644 --- a/src/visual/WaterfallCanvas.cpp +++ b/src/visual/WaterfallCanvas.cpp @@ -43,6 +43,7 @@ WaterfallCanvas::WaterfallCanvas(wxWindow *parent, int *attribList) : lpsIndex = 0; preBuf = false; SetCursor(wxCURSOR_CROSS); + scaleMove = 0; } WaterfallCanvas::~WaterfallCanvas() { @@ -123,6 +124,25 @@ void WaterfallCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { } } + if (scaleMove != 0) { + SpectrumVisualProcessor *sp = wxGetApp().getSpectrumProcessor(); + FFTVisualDataThread *wdt = wxGetApp().getAppFrame()->getWaterfallDataThread(); + SpectrumVisualProcessor *wp = wdt->getProcessor(); + float factor = sp->getScaleFactor(); + + factor += scaleMove * 0.02; + + if (factor < 0.25) { + factor = 0.25; + } + if (factor > 10.0) { + factor = 10.0; + } + + sp->setScaleFactor(factor); + wp->setScaleFactor(factor); + } + if (freqMove != 0.0) { long long newFreq = getCenterFrequency() + (long long)((long double)getBandwidth()*freqMove) * 0.01; @@ -306,14 +326,20 @@ void WaterfallCanvas::OnKeyUp(wxKeyEvent& event) { case 'A': case WXK_UP: case WXK_NUMPAD_UP: + scaleMove = 0.0; zoom = 1.0; - mouseZoom = 0.95; + if (mouseZoom != 1.0) { + mouseZoom = 0.95; + } break; case 'Z': case WXK_DOWN: case WXK_NUMPAD_DOWN: + scaleMove = 0.0; zoom = 1.0; - mouseZoom = 1.05; + if (mouseZoom != 1.0) { + mouseZoom = 1.05; + } break; case WXK_LEFT: case WXK_NUMPAD_LEFT: @@ -336,14 +362,22 @@ void WaterfallCanvas::OnKeyDown(wxKeyEvent& event) { case 'A': case WXK_UP: case WXK_NUMPAD_UP: - mouseZoom = 1.0; - zoom = 0.95; + if (!shiftDown) { + mouseZoom = 1.0; + zoom = 0.95; + } else { + scaleMove = 1.0; + } break; case 'Z': case WXK_DOWN: case WXK_NUMPAD_DOWN: - mouseZoom = 1.0; - zoom = 1.05; + if (!shiftDown) { + mouseZoom = 1.0; + zoom = 1.05; + } else { + scaleMove = -1.0; + } break; case WXK_RIGHT: case WXK_NUMPAD_RIGHT: diff --git a/src/visual/WaterfallCanvas.h b/src/visual/WaterfallCanvas.h index 03fb07b..9efa8c4 100644 --- a/src/visual/WaterfallCanvas.h +++ b/src/visual/WaterfallCanvas.h @@ -67,6 +67,7 @@ private: long double freqMove; float hoverAlpha; int linesPerSecond; + float scaleMove; SpectrumVisualDataQueue visualDataQueue; Timer gTimer;