Make ctrl+scroll zoom in and out of cursor point, rather than center

This commit is contained in:
Kevin Mehall
2017-02-04 09:56:07 -08:00
parent 87d52d5274
commit 705600ef50

View File

@@ -170,9 +170,14 @@ bool PlotView::viewportEvent(QEvent *event) {
if (event->type() == QEvent::Wheel) {
QWheelEvent *wheelEvent = (QWheelEvent*)event;
if (QApplication::keyboardModifiers() & Qt::ControlModifier) {
if (wheelEvent->angleDelta().y() > 0) {
// `updateViewRange()` keeps the center sample in the same place after zoom. Apply
// a scroll adjustment to keep the sample under the mouse cursor in the same place instead.
int fromCenter = wheelEvent->pos().x() - width()/2;
if (wheelEvent->angleDelta().y() > 0 && zoomLevel < fftSize) {
emit zoomIn();
} else if (wheelEvent->angleDelta().y() < 0) {
horizontalScrollBar()->setValue(horizontalScrollBar()->value() + fromCenter * samplesPerLine());
} else if (wheelEvent->angleDelta().y() < 0 && zoomLevel > 1) {
horizontalScrollBar()->setValue(horizontalScrollBar()->value() - fromCenter * samplesPerLine());
emit zoomOut();
}
return true;