Skip to content
  • Sunderlandkyl's avatar
    Fix Windows multitouch and MacOS trackpad gesture interactions · c654847d
    Sunderlandkyl authored
    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.
    c654847d