Les GUIs, introduction et liste

Avant de débuter une application, si l'on ne cible par un système particulier, il convient de choisir une interface graphique utilisateur et un large choix s'offre au programmeur.

Interface utilisateur graphique - GUI

Mais avant toute chose, pour le programmeur lambda, non lié à un environnement particulier, un fait doit être pris en considération: l'avenir de la programmation n'est pas sous Windows (ni aucun autre système), elle est dans les mobiles et les applications Web fonctionnant sur un serveur, aussi devrait-on utiliser un framework pouvant fonctionner sur un serveur et sur un mobile.

Les interfaces utilisateurs classiques sur le bureau sont sur le modèle WIMP. C'est l'acronyme de Window, Icon, Menu, Pointing device (Window, Icône, Menu, Pointeur). Le principe a été développé à partir de 1973 par Xerox et popularisé par Apple avec le MacIntosh, puis par Microsoft à partir de Windows 95.

Ce modèle est remis en question par les écrans tactiles. Dans le cas des mobiles, on a une fragmentation considérable des environnements et interfaces graphiques, traitée dans l'article Programmation d'un téléphone mobile, dont on ne peut s'affranchir qu'avec HTML 5.

Liste de boites à outils (toolkits) et plateformes

Les boites à outils contiennent des composants prédéfinis utilisables directement pour créer l'interface d'une application.

Qt

Qt, acquis par Nokia puis par Digia, était surtout à l'origine utilisé par l'interface KDE sur Linux. Il s'est étendu à tous les systèmes et est maintenant la base de la programmation des applications pour mobiles par Nokia. La boite à outil, QtClick, fournit une quantité de code prêt à utiliser.
Depuis la version 5.1 les applications fonctionnent sur Android et iOS également.

Avantages

Inconvénients

JavaFX

La bibliothèque du langage de programmation Java comprend tous les composants utiles à une interface utilisateur. On dispose en outre de JavaFX, un GUI pour simplifier la création d'interfaces utilisateurs.
Il est possible d'utiliser les classes Java dans une application en C ou PHP.

Avantages

Inconvénients

WPF et WinRT

WPF est la couche d'interface graphique et matériel de .NET, dont l'API permet d'accéder à tous les services de Windows. WinRT est le runtime de Windows 8.

Avantages

Inconvénients.

GTK

Le framework graphique de Gnome sous Linux, porté sous Windows. L'application Windows la plus connue utilisant ce framework est Gimp, et elle est disponible sur tous les systèmes d'exploitation.
Il existe un port de GTK pour PHP, mais non mis à jour depuis des lustres et nécessitant une version modifiée du runtime.
On considère GTK comme moins pratique que Qt, à possibilités équivalentes et plus difficile à programmer.

Electron

Pour réaliser une application locale avec les technologies du Web: navigateur Chrome pour le rendu, HTML et CSS pour la description de l'interface, et JavaScript coté serveur et interface. Cela inclut aussi la bibliothèque libuv pour accéder au système de fichier et toutes les extension de Node.js.
C'est une solution totalement portable et simple d'emploi.
A titre d'exemples d'utilisation on peut voir Advanced Explorer et l'éditeur de code Advanced Editor sur ce site.

Aura

Réalisé par Google pour remplacer GTK afin de donner à Chrome et ChromeOS un framework portable et fonctionnant notamment sur Linux et Android.
Il se base sur OpenGL et ouvre un contexte pour chaque fenêtre et non par onglet, afin d'économiser les ressources.
Aura n'est sans doute pas facile à utiliser pour une application car il est fait pour le navigateur, mais comme la tendance est dans l'utilisation du navigateur comme interface au système (ce que fait ChromeOS), ce framework est indirectement universel.
On peut aussi arguer que GTK a été conçu pour Gimp et est devenu universel, Aura pourrait suivre la même route.

ImGui

Si vous cherchez une bibliothèque d'interface très simple à mettre en oeuvre pour une application C++, ImGui peut être la solution. Le code est aussi simple que ceci:

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

pour afficher un champs d'entrée de texte et gérer à la fois son fonctionnement. La bibliothèque inclut des fonctions de graphiques. Elle fait un usage intensif d'OpenGL et cela peut être inapproprié à certaines applications. C'est le coût pour sa dépendance minimale envers d'autres librairies.
ImGui convient bien pour l'interface de jeux, les applications en plein écran.

Voir aussi: Nuklear. Réalisé en C, il est très léger, environ 15 KO, mais complet.

GuiLite

Bibliothèque simple et économe (environ 5KO) écrite en C++, pour toutes plateformes. Un prévisualisateur d'interface existe pour Visual Studio Code.

Avantages

Tcl/Tk

Tcl est un langage de programmation et Tk un toolkit graphique, fonctionnant avec Tcl ou autres langages.

Avantages

Inconvénients

FTLK

Boite à outils pour créer des interfaces graphiques en C++.

Avantages

Inconvénients

wxWidget

Toolkit pour Windows, Linux, Mac basé sur GTK mais en utilisant les widgets natifs. Il s'utilise avec des langages de programmation différents. Des inconvénients apparaissent à l'usage de par son manque de flexibilité.
En novembre 2013 est sortie la version 3.0, première mise à jour depuis 1998! Cela prouve que le projet est toujours vivant, et la dernière mise à jour date de 2018.

FOX Toolkit

Boite à outils pour créer des interfaces en C++. Porté sous Windows, Linux et autres Unix.
Peut aider à donner le look Windows à des applications sous Linux.

SDL

Une librairie pour la programmation des jeux qui utilise toutes les ressources (video, son, périphériques) de l'ordinateur, tous langages et OS. Ce framework portable donne accès à OpenGL et aux périphériques.
On peut choisir un langage de programmation parmi plusieurs, dont PHP, C++, Java.
Pour Windows, Linux.

APIs de base

Les API de base sont des interfaces au système fournissant des primitives utilisables pour créer une bibliothèque de composants.

OpenGL

Librairie graphique portable, alternative à DirectX, pour des performances optimales. Elle s'interface avec la carte graphique et l'utilisateur doit avoir une version pour sa carte graphique, si non déjà installée par le vendeur.
Il existe une interface à OpenGL pour les navigateurs, WebGL.

Pour réaliser ses propres composants, on peut utiliser une boite à outil avec les bibliothèques dans cette liste. Cela n'approchera pas le simplicité de Qt mais sera beaucoup plus léger.

Cairo

Nommé d'abord Xr, les lettres grecques se prononcent Chi et Ro, ce qui a donné le nouveau nom.
API de graphisme vectoriel. Compatible avec de nombreux systèmes et langages de programmation.
C'est une interface entre un toolkit et OpenGL ou DirectX.

Berkelium, navigateur comme objet d'interface

WebKit

Le moteur de rendu de Chrome et Safari peut être utilisé aussi directement par une application et afficher du HTML 5. Il existe un composant WebKit dans Qt.

Le projet Chromium Embedded permet, ainsi que QtWebkit, d'intégrer un navigateur dans une application et d'utiliser HTML 5 comme langage d'interface. Le navivateur sera alors affiché comme un objet dans le décor.
Mais une solution plus simple serait d'utiliser Electron qui fait la même chose et propose une API en plus.

Clutter

Une bibliothèque de fonctions soutenue par Intel, à l'origine destinée à Meego, le système pour mobile, donc peu encombrante. C'est en fait une interface à OpenGL qui en simplifie l'usage. Elle dispose d'une boite à outil, Mx (comme QT dispose de QtClick). Le langage de programmation est C++ ou Python. Le projet est maintenant associé à Gnome.

DirectX

Interface aux périphériques audio et graphique de Windows.

Conclusion

On voit que quand un framework offre la possibilité de programmer pour mobiles, on entre dans le cercle des spécialisations, chaque plateforme fonctionnant sous le système d'une marque seule.
Sinon, lorsque l'on programme pour le bureau mais pas spécifiquement pour Windows, Qt semble être le framework le plus complet tout en étant portable. La licence est LGPL.
Reste encore la possibilité d'écrire ses propres composants avec OpenGL ou WebKit si l'on besoin d'une interface très limitée.

Voir une liste des outils de développement d'interface utilisateurs graphiques dans la page sur les EDI et une liste des frameworks pour mobiles.

Histoire et documents

En fait l'invention de l'interface graphique avec souris est attribuée à Douglas Carl Engelbart avant la version de Palto Alto.