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.
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
API complète.
Rapide.
Composants OpenGL et WebKit.
Langage d'interface QML .
Grande portabilité.
Plusieurs langages de programmation possibles.
Permet les animations 3D.
Interface de développement visuelle QtCreator.
Utilisable sur (certains) mobiles.
Bonne documentation.
Inconvénients
Fichier très lourd à télécharger pour l'utilisateur.
Licence gratuite pour les projets open source seulement.
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
API complète pour le bureau ou pour le Web.
Plusieurs outils de développement (voir ressources).
Portabilité.
Framework GWT de Google pour le Web (convertit Java en JavaScript).
Inconvénients
Java est plutôt complexe à utiliser hors JavaFX.
Pas spécialement rapide.
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
Rien à télécharger pour l'utilisateur.
Langage d'interface XAML ou HTML 5.
Programmation facile avec Visual Studio.
Outils de développement visuels pour différents langages dont C# et JavaScript.
Inconvénients.
Fonctionne uniquement sur Windows. Les portages de WPF sous d'autres systèmes sont incomplets et il n'y en a pas pour WinRT.
Plus lent à l'exécution à que le natif.
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
Simplicité d'utilisation.
Différents langages de programmation possibles.
Portable sur le bureau et mobiles.
Personnalisable.
N'utilise pas de framework affiche ses propres widgets.
Tcl/Tk
Tcl est un langage de programmation et Tk un toolkit graphique, fonctionnant avec Tcl ou autres langages.
Avantages
Simplicité d'utilisation.
Différents langages de programmation possibles si besoin.
Portable.
Inconvénients
Tcl est un langage dynamique, donc plus lent.
Tk est conçu pour Tcl.
FTLK
Boite à outils pour créer des interfaces graphiques en C++.
Avantages
Portable (Windows, Linux, Mac et autres).
Léger.
Supporte OpenGL.
Editeur d'interfaces visuel FLUID.
Inconvénients
Moins complet que les alternatives précédentes.
Limité à un langage de programmation.
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.
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.