diff --git a/src/libs/vwidgets/vmaingraphicsview.cpp b/src/libs/vwidgets/vmaingraphicsview.cpp index 12d2d6fc5..84a7a0363 100644 --- a/src/libs/vwidgets/vmaingraphicsview.cpp +++ b/src/libs/vwidgets/vmaingraphicsview.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) # include @@ -80,6 +81,7 @@ GraphicsViewZoom::GraphicsViewZoom(QGraphicsView* view) _numScheduledHorizontalScrollings(0) { _view->viewport()->installEventFilter(this); + _view->viewport()->grabGesture(Qt::PinchGesture); _view->setMouseTracking(true); verticalScrollAnim->setUpdateInterval(updateInterval); @@ -249,6 +251,10 @@ bool GraphicsViewZoom::eventFilter(QObject *object, QEvent *event) } } } + else if (event->type() == QEvent::Gesture) + { + return GestureEvent(static_cast(event)); + } return QObject::eventFilter(object, event); } @@ -353,6 +359,28 @@ bool GraphicsViewZoom::StartHorizontalScrollings(QWheelEvent *wheel_event) return true; } +//--------------------------------------------------------------------------------------------------------------------- +bool GraphicsViewZoom::GestureEvent(QGestureEvent *event) +{ + if (QGesture *pinch = event->gesture(Qt::PinchGesture)) + { + PinchTriggered(static_cast(pinch)); + return true; + } + return false; +} + +//--------------------------------------------------------------------------------------------------------------------- +void GraphicsViewZoom::PinchTriggered(QPinchGesture *gesture) +{ + QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags(); + if (changeFlags & QPinchGesture::ScaleFactorChanged) + { + qreal currentStepScaleFactor = gesture->lastScaleFactor(); + gentle_zoom(currentStepScaleFactor); + } +} + const unsigned long VMainGraphicsView::scrollDelay = 80; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vwidgets/vmaingraphicsview.h b/src/libs/vwidgets/vmaingraphicsview.h index 5f781ba47..5bbb76cb2 100644 --- a/src/libs/vwidgets/vmaingraphicsview.h +++ b/src/libs/vwidgets/vmaingraphicsview.h @@ -66,6 +66,8 @@ */ class QTimeLine; +class QGestureEvent; +class QPinchGesture; class GraphicsViewZoom : public QObject { @@ -104,6 +106,9 @@ private: bool StartVerticalScrollings(QWheelEvent* wheel_event); bool StartHorizontalScrollings(QWheelEvent* wheel_event); + + bool GestureEvent(QGestureEvent *event); + void PinchTriggered(QPinchGesture* gesture); }; /**