enh(viz): make 3D scene more tactile friendly
Description
3D scene lacks tactile friendliness. In order to zoom, it is necessary to use the mouse wheel, and as such, a mouse, and in order to create a landmark it is necessary to to hold the Ctrl key, and as such, having a keyboard.
Proposal
Use gestures to remove the need of mouse and keyboard with touchscreens.
Functional specifications
Use pinch gesture to zoom and use long tap gesture to create a landmark.
Technical specifications
sight::module::viz::scene3dQt::Window is the widget that actually displays the scene. It inherits from QWindow, which provides a low-level API for writing directly on a surface using OpenGL. By its low-level nature, QWindow doesn't integrate that well within a QWidget-based application. One way to integrate QWindow in a QWidget-based application is to create a window container, which is a QWidget which may be used in a QWidget-based application like any other QWidget. Another problem linked to its low-level nature is that it doesn't understand gesture events by itself.
Meanwhile, sight::module::viz::scene3dQt::WindowInteractor will create a manage a window container, which is a QWidget which wraps around a QWindow to allow it to integrate within a QWidget-based application. As a QWidget, it understands gesture event. As such, a solution was to forward touch events done on QWindow to the window container, which can synthesize gesture events, which is then sent back to the QWindow.
sight::viz::scene3d::IInteractor is the base class of all interactors which can be registered in a 3D scene. This class have a method for each possible input events. New methods should be added for the gestures.
Test plan
Manual testing, eventually add a GUI test.