Loading
Fix Windows multitouch and MacOS trackpad gesture interactions
Previously the touch interactions in Qt worked for touchpad on MacOS, but not on Windows touchscreens. This commit adds support for multi-touch gestures on Windows touchscreens and fixes some errors in MacOS trackpad gestures.
List of gestures supported:
- Tap
- Tap And Hold
- Pinch
- Rotate
- Pan
- Swipe
Added new example QVTKTouchscreenRenderWindows to demonstrate the use of gesture events in a QVTKOpenGLNativeWidget. See demonstration video here: https://youtu.be/fpnqsDmJ0Y8
Implementation details:
Modified QVTKInteractorAdapter to invoke events using widget local coordinates
- Qt coordinates are inconsistent between gestures, and even within the same gesture on different platforms (Windows touchscreen vs MacOS touchpad)
- VTK expects the invoked events to be in the local coordinate frame
Updated vtkInteractorStyleMultiTouchCamera to utilize the updated events
- Calls StartGesture() to switch interactor states when a Pinch/Rotate/Pan gesture is started. This prevents other states such as rotate from interfering with the gestures.
- Adjusted behavior of the different gestures. Pinch and rotate are now performed relative to the position of the gesture on the screen, instead of dollying/rotating around the focal point.
Fixes made to support gestures:
- Pass widget as parent to InteractorAdapter in QVTKRenderWindowAdapter. Without a widget, we cannot calculate local coordinates from QWidget::mapFromGlobal().
- Pass -DQt5_DIR=${Qt5_DIR} to examples with the add_example CMake function. Qt examples would not build since they were missing Qt5_DIR.