FireMonkey


FireMonkey is a cross-platform GUI framework developed by Embarcadero Technologies for use in Delphi or C++Builder, using C++ or Object Pascal to build cross platform applications for Windows, macOS, iOS, and Android. There is also a 3rd party library that enables the building of FireMonkey applications on Linux.

History

FireMonkey is based on VGScene, which was designed by Eugene Kryukov of KSDev from Ulan-Ude, Russia as a next generation vector-based GUI. In 2011 VGScene was sold to the American company Embarcadero Technologies. Eugene continued to be involved in the development of FireMonkey. Along with the traditional Windows only Visual Component Library, FireMonkey is included as part of Delphi, C++Builder and RAD Studio since version XE2. FireMonkey started out as a vector based UI framework, but evolved to be a bitmap or raster based UI framework to give greater control of the look to match target platform appearances.

Overview

FireMonkey is a cross-platform UI framework, and allows developers to create user interfaces that run on Windows, macOS, iOS and Android. It is written to use the GPU where possible, and applications take advantage of the hardware acceleration features available in Direct2D on Windows Vista, Windows 7 and Windows 8, OpenGL on macOS, OpenGL ES on iOS and Android, and on Windows platforms where Direct2D is not available it falls back to GDI+.
Applications and interfaces developed with FireMonkey are separated into the two categories, HD and 3D. An HD application is a traditional two-dimensional interface; that is, UI elements on the screen. It is referred to as HD because FireMonkey utilizes multi-resolution bitmaps in its dynamic style system to take advantage of high-DPI displays. The second type, a 3D interface, provides a 3D scene environment useful for developing visualisations. The two can be freely mixed, with 2D elements in a 3D scene, either as an overlay or in the 3D space, and 3D scenes integrated into the normal 2D "HD" interface. The framework has inbuilt support for effects and animation, allowing modern WPF-style fluid interfaces to be easily built. It also supports native themes, so a FireMonkey application, can look very close to native on each platform. Native controls can be used on Windows, macOS, iOS and Android through both third-party libraries and the ControlType property.
FireMonkey is not only a visual framework but a full software development framework, and retains many features available with VCL. The major differences are:
Due to the framework being cross-platform compatible, the same source code and form design can be used to deploy to the various platforms it supports. It natively supports 32-bit and 64-bit executables on Windows, and 32-bit executables on macOS and iOS, as well as native executables on Android. FireMonkey includes that adapt the user interface to the correct behavior and appearance on each target platform.
Since its introduction in XE2, there have been numerous improvements in many areas of the framework and it is being actively developed and improved. For example, macOS development is integrated tightly into the IDE, requiring a Mac only for deployment. Numerous components such as sensors, touch and GPS have been added, especially useful for those developing mobile apps. There have been significant performance and underlying tech improvements too.

Features

Graphics

FireMonkey uses hardware acceleration when available on Windows, macOS, iOS, and Android. Direct2D or OpenGL can be used on Windows Vista, Windows 7 and Windows 8. On Windows platforms where Direct2D is not available it falls back to GDI+. OpenGL is used on macOS. OpenGL ES is used on iOS and Android.

Styles

All controls in FireMonkey are styleable via the styling system. This is accomplished by attaching a to the form, and a style is loaded and applied to the form.

Platform Services

In addition to visual component, FireMonkey uses a set of services to provide a loosely coupled way of accessing platform specific features independent of the platform. This also shows up as platform default behaviors. For example the TabPosition of the TTabControl has a property value of PlatformDefault that moves the tabs to the top on Android and the bottom on iOS automatically to be inline with the design guidelines for those platforms.