diff --git a/toonz/sources/include/toonzqt/schematicviewer.h b/toonz/sources/include/toonzqt/schematicviewer.h index abc4bb8..a50608e 100644 --- a/toonz/sources/include/toonzqt/schematicviewer.h +++ b/toonz/sources/include/toonzqt/schematicviewer.h @@ -169,7 +169,7 @@ private: Qt::MouseButton m_buttonState; QPoint m_oldWinPos; QPointF m_oldScenePos; - QPointF m_firstPanPoint; + QPointF m_firstPanPoint, m_mousePanPoint; QPoint m_zoomPoint; bool m_firstShowing; diff --git a/toonz/sources/toonz/sceneviewerevents.cpp b/toonz/sources/toonz/sceneviewerevents.cpp index 2817f18..7ff3957 100644 --- a/toonz/sources/toonz/sceneviewerevents.cpp +++ b/toonz/sources/toonz/sceneviewerevents.cpp @@ -904,6 +904,7 @@ void SceneViewer::wheelEvent(QWheelEvent *event) { m_touchDevice == QTouchDevice::TouchScreen) || m_gestureActive == false) { zoomQt(event->pos() * getDevPixRatio(), exp(0.001 * delta)); + m_panning = false; } } event->accept(); @@ -956,6 +957,7 @@ void SceneViewer::gestureEvent(QGestureEvent *e) { } if (m_zooming) { zoomQt(firstCenter * getDevPixRatio(), scaleFactor); + m_panning = false; } m_gestureActive = true; } diff --git a/toonz/sources/toonzqt/schematicviewer.cpp b/toonz/sources/toonzqt/schematicviewer.cpp index b70b0c1..197dc1c 100644 --- a/toonz/sources/toonzqt/schematicviewer.cpp +++ b/toonz/sources/toonzqt/schematicviewer.cpp @@ -237,14 +237,14 @@ void SchematicSceneViewer::mousePressEvent(QMouseEvent *me) { m_zooming = true; return; } else if (m_cursorMode == CursorMode::Hand) { - m_firstPanPoint = m_touchDevice == QTouchDevice::TouchScreen + m_mousePanPoint = m_touchDevice == QTouchDevice::TouchScreen ? mapToScene(me->pos()) : me->pos(); m_panning = true; return; } } else if (m_buttonState == Qt::MidButton) { - m_firstPanPoint = m_touchDevice == QTouchDevice::TouchScreen + m_mousePanPoint = m_touchDevice == QTouchDevice::TouchScreen ? mapToScene(me->pos()) : me->pos(); } @@ -282,9 +282,9 @@ void SchematicSceneViewer::mouseMoveEvent(QMouseEvent *me) { QPointF usePos = m_touchDevice == QTouchDevice::TouchScreen ? mapToScene(me->pos()) : me->pos(); - QPointF deltaPoint = usePos - m_firstPanPoint; + QPointF deltaPoint = usePos - m_mousePanPoint; panQt(deltaPoint); - m_firstPanPoint = m_touchDevice == QTouchDevice::TouchScreen + m_mousePanPoint = m_touchDevice == QTouchDevice::TouchScreen ? mapToScene(me->pos()) : me->pos(); } else { @@ -292,6 +292,7 @@ void SchematicSceneViewer::mouseMoveEvent(QMouseEvent *me) { int deltaY = (m_oldWinPos.y() - me->pos().y()) * 10; double factorY = exp(deltaY * 0.001); changeScale(m_zoomPoint, factorY); + m_panning = false; } m_oldWinPos = currWinPos; m_oldScenePos = currScenePos; @@ -390,6 +391,7 @@ void SchematicSceneViewer::wheelEvent(QWheelEvent *me) { m_gestureActive == false) { double factor = exp(delta * 0.001); changeScale(me->pos(), factor); + m_panning = false; } } me->accept(); @@ -426,15 +428,11 @@ void SchematicSceneViewer::zoomQt(bool zoomin, bool resetZoom) { */ void SchematicSceneViewer::changeScale(const QPoint &winPos, qreal scaleFactor) { - QPointF startScenePos = m_touchDevice == QTouchDevice::TouchScreen - ? mapToScene(winPos) - : mapToScene(winPos * getDevPixRatio()); - QMatrix scale = QMatrix().scale(scaleFactor, scaleFactor); + QPointF startScenePos = mapToScene(winPos); + QMatrix scale = QMatrix().scale(scaleFactor, scaleFactor); setMatrix(scale, true); - QPointF endScenePos = m_touchDevice == QTouchDevice::TouchScreen - ? mapToScene(winPos) - : mapToScene(winPos * getDevPixRatio()); - QPointF delta = endScenePos - startScenePos; + QPointF endScenePos = mapToScene(winPos); + QPointF delta = endScenePos - startScenePos; translate(delta.x(), delta.y()); } @@ -478,6 +476,7 @@ void SchematicSceneViewer::normalizeScene() { //------------------------------------------------------------------ void SchematicSceneViewer::panQt(const QPointF &delta) { + if (delta == QPointF()) return; setInteractive(false); // I need to disable QGraphicsView event handling to avoid the generation of // 'virtual' mouseMoveEvent @@ -576,6 +575,7 @@ void SchematicSceneViewer::gestureEvent(QGestureEvent *e) { } if (m_zooming) { changeScale(firstCenter, scaleFactor); + m_panning = false; } m_gestureActive = true; } @@ -681,8 +681,11 @@ bool SchematicSceneViewer::event(QEvent *e) { gestureEvent(static_cast(e)); return true; } - if (e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchEnd || - e->type() == QEvent::TouchCancel || e->type() == QEvent::TouchUpdate) { + if ((e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchEnd || + e->type() == QEvent::TouchCancel || e->type() == QEvent::TouchUpdate) && + CommandManager::instance() + ->getAction(MI_TouchGestureControl) + ->isChecked()) { touchEvent(static_cast(e), e->type()); m_gestureActive = true; return true;