Support for pinch gesture (zooming) on touchpad. ref #831.
--HG-- branch : develop
This commit is contained in:
parent
702c256c87
commit
50c858ce30
|
@ -47,6 +47,7 @@
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QDesktopWidget>
|
#include <QDesktopWidget>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
|
#include <QGestureEvent>
|
||||||
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
|
||||||
# include <QOpenGLWidget>
|
# include <QOpenGLWidget>
|
||||||
|
@ -80,6 +81,7 @@ GraphicsViewZoom::GraphicsViewZoom(QGraphicsView* view)
|
||||||
_numScheduledHorizontalScrollings(0)
|
_numScheduledHorizontalScrollings(0)
|
||||||
{
|
{
|
||||||
_view->viewport()->installEventFilter(this);
|
_view->viewport()->installEventFilter(this);
|
||||||
|
_view->viewport()->grabGesture(Qt::PinchGesture);
|
||||||
_view->setMouseTracking(true);
|
_view->setMouseTracking(true);
|
||||||
|
|
||||||
verticalScrollAnim->setUpdateInterval(updateInterval);
|
verticalScrollAnim->setUpdateInterval(updateInterval);
|
||||||
|
@ -249,6 +251,10 @@ bool GraphicsViewZoom::eventFilter(QObject *object, QEvent *event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (event->type() == QEvent::Gesture)
|
||||||
|
{
|
||||||
|
return GestureEvent(static_cast<QGestureEvent*>(event));
|
||||||
|
}
|
||||||
|
|
||||||
return QObject::eventFilter(object, event);
|
return QObject::eventFilter(object, event);
|
||||||
}
|
}
|
||||||
|
@ -353,6 +359,28 @@ bool GraphicsViewZoom::StartHorizontalScrollings(QWheelEvent *wheel_event)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
bool GraphicsViewZoom::GestureEvent(QGestureEvent *event)
|
||||||
|
{
|
||||||
|
if (QGesture *pinch = event->gesture(Qt::PinchGesture))
|
||||||
|
{
|
||||||
|
PinchTriggered(static_cast<QPinchGesture *>(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;
|
const unsigned long VMainGraphicsView::scrollDelay = 80;
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -66,6 +66,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class QTimeLine;
|
class QTimeLine;
|
||||||
|
class QGestureEvent;
|
||||||
|
class QPinchGesture;
|
||||||
|
|
||||||
class GraphicsViewZoom : public QObject
|
class GraphicsViewZoom : public QObject
|
||||||
{
|
{
|
||||||
|
@ -104,6 +106,9 @@ private:
|
||||||
|
|
||||||
bool StartVerticalScrollings(QWheelEvent* wheel_event);
|
bool StartVerticalScrollings(QWheelEvent* wheel_event);
|
||||||
bool StartHorizontalScrollings(QWheelEvent* wheel_event);
|
bool StartHorizontalScrollings(QWheelEvent* wheel_event);
|
||||||
|
|
||||||
|
bool GestureEvent(QGestureEvent *event);
|
||||||
|
void PinchTriggered(QPinchGesture* gesture);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue
Block a user