Gesture Support in Metropolis UI Applications
Go Up to Developing Metropolis UI Applications
Metropolis UI applications support the following gestures:
- Thirty-four standard gestures - see TStandardGesture Enum.
- Five interactive gestures - see Vcl.Controls.TInteractiveGesture or FMX.Types.TInteractiveGesture.
Custom gestures are not supported in Metropolis UI applications.
Gesture support in FireMonkey is provided through two different Windows APIs:
- RealTimeStylus API for standard (single-touch) gestures
- Windows Touch API for interactive (multi-touch) gestures
Support for Windows 8 Interactive Gestures
When you run a Metropolis UI application on Windows 8, most of the Windows 8 interactive gestures are supported, as follows:
Windows 8 Gesture | Support in Metropolis UI Applications |
---|---|
Tap |
Supported as a click, translated by Windows 8 |
Press and Hold |
Not supported |
Slide |
Not supported * |
Swipe |
Not supported * |
Turn |
Supported as Rotate |
Pinch |
Supported as Zoom (the EventInfo.Distance value decreases) |
Stretch |
Supported as Zoom (the EventInfo.Distance value increases) |
* The Slide and Swipe gestures can be simulated using the Pan gesture in Metropolis UI applications, by tracking the location and direction of the pan movement.
The supported interactive gestures are described in:
For more information about equivalent interactive gestures, see http://msdn.microsoft.com/en-us/library/windows/apps/hh761498.aspx#input_modes.
Handling Gestures with Windows 8
In Windows 8, when the RealTimeStylus is enabled for a window, all gestures are sent through the MS Windows 8 RealTimeStylus API, and the Windows Touch API does not report any events.
To workaround this issue, a global flag has been added to FireMonkey that allows the RealTimeStylus API to be disabled. When the RealTimeStylus API is disabled, FireMonkey does not detect standard gestures. Instead, the gesture events from the Windows Touch API are reported individually through the OnGesture event handler.
You can interpret these events to determine the gesture that was made by the user. A Windows Touch gesture is reported as multiple events, beginning with one event with the TGestureEventInfo.Flag containing gfBegin, and ending with an event containing gfEnd. For more information, see FMX.Types.TInteractiveGestureFlag.
To enable the reporting of Windows Touch events, and to enable interactive gestures, the following code should be added to the beginning of the main program file:
Delphi:
TPlatformServices.Current.GlobalFlags.Add(GlobalDisableStylusGestures, True);
C++:
TPlatformServices::Current->GlobalFlags->Add(GlobalDisableStylusGestures, true);
You should also add FMX.Platform and FMX.Consts to your uses
section or #include
statements.
This workaround is not required on Windows 7 and might not be required in the final release of Windows 8.