Use Mouse wheel and ctrl to zoom the curve editor

Change-Id: I85001a2173e69887f72c2e0b366861e0753dd8a3
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Knud Dollereder
2022-08-22 15:21:10 +02:00
committed by Thomas Hartmann
parent 0192cef3bb
commit b3359f28a6

View File

@@ -82,41 +82,52 @@ bool Navigation2dFilter::gestureEvent(QGestureEvent *event)
bool Navigation2dFilter::wheelEvent(QWheelEvent *event) bool Navigation2dFilter::wheelEvent(QWheelEvent *event)
{ {
if (event->source() == Qt::MouseEventSynthesizedBySystem) { if (!event->modifiers().testFlag(Qt::ControlModifier)) {
if (event->modifiers().testFlag(Qt::ControlModifier)) { if (event->source() == Qt::MouseEventSynthesizedBySystem) {
if (QPointF delta = event->pixelDelta(); !delta.isNull()) {
double dist = std::abs(delta.x()) > std::abs(delta.y()) ? -delta.x() : delta.y();
emit zoomChanged(dist/200.0, event->position());
event->accept();
return true;
}
} else {
emit panChanged(QPointF(event->pixelDelta())); emit panChanged(QPointF(event->pixelDelta()));
event->accept(); event->accept();
return true; return true;
} }
} else if (event->source() == Qt::MouseEventNotSynthesized) { return false;
}
auto zoomInSignal = QMetaMethod::fromSignal(&Navigation2dFilter::zoomIn); auto zoomChangedSignal = QMetaMethod::fromSignal(&Navigation2dFilter::zoomChanged);
bool zoomInConnected = QObject::isSignalConnected(zoomInSignal); bool zoomChangedConnected = QObject::isSignalConnected(zoomChangedSignal);
auto zoomOutSignal = QMetaMethod::fromSignal(&Navigation2dFilter::zoomOut); if (zoomChangedConnected) {
bool zoomOutConnected = QObject::isSignalConnected(zoomOutSignal); if (QPointF delta = event->pixelDelta(); !delta.isNull()) {
double dist = std::abs(delta.x()) > std::abs(delta.y()) ? -delta.x() : delta.y();
emit zoomChanged(dist/200.0, event->position());
event->accept();
return true;
} else if (QPointF delta = event->angleDelta(); !delta.isNull()) {
double dist = std::abs(delta.x()) > std::abs(delta.y()) ? -delta.x() : delta.y();
dist = dist / (8*15);
emit zoomChanged(dist/200.0, event->position());
event->accept();
return true;
}
return false;
}
if (zoomInConnected && zoomOutConnected) { auto zoomInSignal = QMetaMethod::fromSignal(&Navigation2dFilter::zoomIn);
if (event->modifiers().testFlag(Qt::ControlModifier)) { bool zoomInConnected = QObject::isSignalConnected(zoomInSignal);
if (QPointF angle = event->angleDelta(); !angle.isNull()) {
double delta = std::abs(angle.x()) > std::abs(angle.y()) ? angle.x() : angle.y(); auto zoomOutSignal = QMetaMethod::fromSignal(&Navigation2dFilter::zoomOut);
if (delta > 0) bool zoomOutConnected = QObject::isSignalConnected(zoomOutSignal);
emit zoomIn();
else if (zoomInConnected && zoomOutConnected) {
emit zoomOut(); if (QPointF angle = event->angleDelta(); !angle.isNull()) {
event->accept(); double delta = std::abs(angle.x()) > std::abs(angle.y()) ? angle.x() : angle.y();
return true; if (delta > 0)
} emit zoomIn();
} else
emit zoomOut();
event->accept();
return true;
} }
} }
return false; return false;
} }