GUIs, introduction and list

Before starting an application, if we do not target a particular system, we should choose a graphical user interface, and a wide choice is offered to the programmer.

Graphical User Interface - GUI

But above all, for a lambda programmer, unrelated to a particular environment, a fact must be taken into consideration: the future of programming is not Windows (or any other system), it is in mobile devices and Web applications running on a server, so should we use a framework able to run on a server and a mobile.

Classical user interface on the desktop operate on the WIMP model. It is the acronym of Window, Icon, Menu, Pointing device. The principle was developed from 1973 by Xerox and popularized by Apple with the Macintosh and then by Microsoft from Windows 95.

This model is challenged by touch screens. In the case of mobiles, we are facing a considerable fragmentation of environments and graphical interfaces, as discussed in the article Programming a mobile phone, which we can overcome only with HTML 5.

List of toolkits and platforms

Toolkits contain predefined components used directly to create the interface of an application.

Qt

Qt, acquired by Nokia, then by Digia, was originally mainly used by KDE on Linux. It spread to all systems and is now the basis for programming applications for mobiles by Nokia. The toolbox, QtClick, provide a lot of ready to use code.
Since version 5.1 applications run on Android and iOS as well.

Benefits

Disadvantages

JavaFX

The library of the Java programming language includes all components necessary to user interface. JavaFX makes it easier to build user interfaces.
It is possible to use Java classes in a C or PHP application.

Benefits

Disadvantages

WPF and WinRT

WPF is the GUI and devices layer on .NET. The API which provides access to all Windows services. WinRT is the runtime of Windows 8.

Benefits

Disadvantages.

GTK

The graphical framework for Gnome on Linux is ported to Windows. The best-known Windows application using this framework is the Gimp, and it is available on all operating systems.
There is a port of GTK for PHP, but not updated for ages and requires a modified version of the runtime.
GTK is considered as less convenient than Qt, to equal features, and more difficult to program.

Electron

To build a local application with Web technologies: Chrome browser for rendering, HTML and CSS for the description of the interface, and JavaScript side server and interface side. This also includes the libuv library to access the file system and all extensions of Node.js.
It's a totally portable and easy-to-use solution.
As examples of use we can see Advanced Explorer and the Advanced editor on this site.

Aura

Made by Google to replace GTK to give Chrome and ChromeOS a portable graphical framework, working on Linux and Android.
It is based on OpenGL and opens a context for each window, rather than each tab in order to save resources.
Aura is probably not easy to use for an application as it is designed for the browser, but as the trend is to use the browser as the interface to the system (what ChromeOS essentially does), this framework is indirectly universal.
One can also argue that GTK has been made for Gimp and became universal, Aura could follow the same route.

ImGui

If you are looking for a very simple interface library to implement in a C++ application , ImGui may be the solution. The code is as simple as this:

ImGui::InputText("string", buffer, 128);

to display a text entry field and manage its operation. The library includes also functions for charts. It makes a heavy use of OpenGL and this can be inappropriate for some applications. It is the cost for its minimal dependencies to other libraries.
ImGui is well suited for the interface of games, for full screen apps.

See also: Nuklear, a lightweight but full framework written in C.

GuiLite

Simple and lighweight library (about 5KO) written in C++, for all platforms. An interface previewer exists for Visual Studio Code.

Benefits

Tcl/Tk

Tcl is a programming language and Tk a GUI toolkit, working with Tcl and other languages.

Benefits

Disadvantages

FTLK

Toolkit for creating graphical user interfaces in C.

Benefits

Disadvantages

wxWidget

Toolkit for Windows, Linux, Mac based on GTK but using native widgets. It is used with different programming languages. Disadvantages appear at use due to its lack of flexibility.
In November 2013 came the version 3.0, the first update since 1998! This proves that the project is still alive, and the last update is from 2018.

FOX Toolkit

Toolbox to create interfaces in C. Ported to Windows, Linux and other Unix.
Can help give the look of Windows applications on Linux.

SDL

A library for game programming using all resources (sound, video, devices) of the computer, for any language, any OS. This framework provides access to OpenGL and DirectX.
We can use many programming languages, including PHP, C, Java.
For Windows, Linux.

Basic APIs

There APIs are interfaces to the systems, providing primitives used to create a library of components.

OpenGL

Portable graphics library, an alternative to DirectX, for optimal performance. It interfaces with the graphics card, and user must have a version for his graphics card, if not already installed by the seller.
There is an interface to OpenGL for browsers, WebGL.

To build your own components, you can make a tool box with libraries in this list. This will not approach the simplicity of Qt, but will be much lighter.

Cairo

Named first Xr, the Greek letters are pronounced Chi and Ro, which gave the new name.
Vector graphics API. Compatible with many systems and programming languages.
This is an interface between a toolkit and OpenGL or DirectX.

WebKit

The rendering engine of Chrome and Safari can also be used directly by an application and display HTML 5. There is a WebKit component in Qt.

The project Chromium Embedded  allows, like QtWebKit, integrating a browser into an application and use HTML 5  as interface language. The browser will then displayed as an objet in the scenery.
But a simple solution would be to use Electron which offers the same features plus an additional API.

Berkelium, browser as object of interface

Clutter

A library  supported by Intel originally intended for Meego, the system for mobile, so using little space. This is actually an interface to OpenGL which simplifies its use. It has a toolbox, Mx (like QT has QtClick). The programming language is C++ or Python. The projet is now a part of Gnome.

DirectX

Interface to audio and graphic devices on Windows.

Conclusion

We see that when a framework offers the possibility of programming for mobile phones, one enters the circle of specializations, each platform running a system for a single brand.
Otherwise, when programming for the desktop but not specifically for Windows, Qt seems to be the most comprehensive framework while being portable. The license is LGPL.
Remain still the possibility to write his own components with OpenGL or WebKit if you need a very limited interface.

See a list of tools to make graphical user interfaces on the page on EDI and a list of frameworks for mobile devices.