630 likes | 758 Views
Interfaces graphiques. Hervé Frezza-Buet. Préambule. Au commencement étaient les langages de commande mv /poche/kleenex Poubelle/ Ecran : interface textuelle Apparition d’écrans Bitmap Nouvelles interfaces utilisateur. Préambule. Xerox (Xerox Parc de Palo Alto) Concept de fenêtre+souris
E N D
Interfaces graphiques Hervé Frezza-Buet
Préambule • Au commencement étaient les langages de commande • mv /poche/kleenex Poubelle/ • Ecran : interface textuelle • Apparition d’écrans Bitmap • Nouvelles interfaces utilisateur
Préambule • Xerox (Xerox Parc de Palo Alto) • Concept de fenêtre+souris • Application commerciale • Apple Macintosh • … puis Microsoft Windows. • Sun et Apollo (monde Unix), systèmes propriétaires. • Monde Unix : X Windows (1987) (MIT + IBM + DEC + …)
Application Préambule • Applications graphiques asynchrones avec l’utilisateur Les interfaces textuelles sont synchrones Utilisateur > 2 + 3 5 > 2 + a Segmentation fault
Application Dessin événement Click Dessin Bouge souris événement Préambule • Applications graphiques asynchrones avec l’utilisateur Utilisateur ok
Préambule • Applications graphiques asynchrones avec l’utilisateur • Autres exemples • Simulateurs • Jeux vidéo • ...
Préambule • Quelques précisions • Le système gère la carte graphique • Le système gère des fenêtres
Préambule • Quelques précisions • … pourtant, c’est ce que font • Mac OS • Windows
Préambule • Quelques précisions • Cas d’Unix (et Linux) : • La gestion des fenêtre est un processus comme un autre (qui prend la carte graphique) • Les différentes composantes sont bien isolées • Présentation de X Windows • Les autres s’en déduisent • Dans tous les cas, fouiller la doc… … avec les concepts de ce cours en tête !
Plan • Concepts des systèmes de fenêtre • ex : Serveurs X Windows d’Unix ou XWin32 de Windows • Surcouches de développement : Les Widgets. • Programmation
> ls toto titi tutu > cp toto tata > rm titi Concepts : X Windows • Architecture client-server Cas « classique » : Utilisateur au niveau du client, application au niveau du serveur. Appli
> ls toto titi tutu > cp toto tata > rm titi > ls toto titi tutu > cp toto tata > rm titi > ls toto titi tutu > cp toto tata > rm titi > ls toto titi tutu > cp toto tata > rm titi Concepts : X Windows • Architecture client-server Cas « classique » : Utilisateur au niveau du client, application au niveau du serveur.
Concepts : X Windows • Architecture client-server Cas X Windows : Les applications sont clientes des serveurs de fenêtres (les fenêtres sont sur le poste de l’utilisateur…) Appli X
X X X X Concepts : X Windows • Architecture client-server Cas X Windows : Les applications sont clientes des serveurs de fenêtres
Concepts : X Windows • Architecture client-server • Portabilité • Terminaux X : exploitation du réseau • Séparation entre système de fenêtre et système d’exploitation.
Concepts : X Windows • Architecture client-serveur : Exemple d’application X Vous : Programmeur Client de X Utilisateur : Kasparov (même pas fichu de faire du C) échecs X Grosse machine (calculateur) Machine avec une bonne carte vidéo
Protocole X Windows Xlib Concepts : X Windows • Structure d’une application X • Ouverture d’un canal d’affichage TCP/IP vers le serveur (spécificité X Windows) • Demande au serveur de créer des ressources • Mise en attente d’événements provenant du serveur. Boucle « infinie », durant laquelle on peut aussi créer et détruire des ressources
Les fenêtres et pixmaps • Fenêtres : Structuration hiérarchique de la surface de l'écran en zones rectangulaires Notion d'arbre de parenté des fenêtres Un arbre par écran !
2 22 1 2 3 1 21 23 3 21 22 23 31 32 31 32 321 Les fenêtres et pixmaps root 321 Nota : Relation d'ordre entre sœurs root
Les fenêtres et pixmaps Une ancêtre est retirée • États d'une fenêtre On peut quand même dessiner Affichée (map) Décelable Création occultée Retirée (unmap) Visible Indécelable Partiel- lement visible Totale- ment visible
Les fenêtres et pixmaps • Window Manager • Application qui sollicite (XSelectInput) un type d'événement particulier sur Root • Le serveur redirige alors les requêtes de position et dimension vers cette application (unique).
Les fenêtres et pixmaps • Window Manager : Exemple Applications clientes de X réseau tetris réseau Un Window Manager
Les fenêtres et pixmaps • Window Manager : Exemple XCreateSimpleWindow réseau tetris Retirée réseau Un Window Manager
Les fenêtres et pixmaps • Window Manager : Exemple réseau tetris Événement spécifique réseau Un Window Manager
Les fenêtres et pixmaps • Window Manager : Exemple réseau tetris XCreateSimpleWindow réseau Un Window Manager
Les fenêtres et pixmaps • Window Manager : Exemple réseau tetris XReparentWindow réseau Un Window Manager
Les fenêtres et pixmaps • Window Manager : Exemple réseau tetris réseau Un Window Manager
Les fenêtres et pixmaps • Window Manager : Exemple XMapWindow réseau tetris Indécelable réseau Un Window Manager
Les fenêtres et pixmaps • Window Manager : Exemple réseau tetris Événement spécifique réseau Un Window Manager
Les fenêtres et pixmaps • Window Manager : Exemple réseau tetris XMapWindow réseau Un Window Manager
Les fenêtres et pixmaps • Window Manager • Il en existe de nombreux, avec des comportements rigolos… • fvwm, enlightment, afterstep, etc… • Il existe aussi des applications bizarres : • xcafard, xsnow… • Gestion de thèmes
Les fenêtres et pixmaps • Les pixmaps • Il s'agit de ressources (Pixmap) dans lesquelles ont peut dessiner, comme les fenêtre. • Les pixmaps ne s'affichent pas, ne sont pas hiérarchiques. • Type : Pixmap , Window = Drawable
Les fenêtres et pixmaps • Les pixmaps : rôle • Stocker des motifs • texture de fond, • texture de bordure • Stocker un dessin • pour le curseur • … • Dessiner off-screen, puis copier le dessin terminé dans une fenêtre • ...
Les contextes graphiques • Il s'agit d'un ensemble de caractéristiques pour le dessin • Création d'un contexte • Configuration du contexte • Dessin dans ce contexte Display * canal_aff; XGCValues val; unsigned long mask; /* 0 => valeurs par défaut */ GC contexte; contexte = XCreateGC (canal_aff,un_drawable,0,&val); XFreeGC (canal_aff,contexte);
événement sollicités File requête Tampon Client Les événements • Le serveur informe le client d'événements générés par l'utilisateur, ou par d'autres clients. Allocation et configuration X Lecture
Les événements • Boucle de lecture d'événements Display * canal_aff; XEvent evt; int stop; … stop = 0; While (!stop) { if(!XEventsQueued(canal_aff,QueuedAfterReading)) { XFlush(canal_aff); UnPasDeCalculEnTacheDeFond(); } else { XNextEvent(canal_aff,&evt); switch(evt.type) { case ButtonPress : … break; … }} }
Les événements • Fonction de traitement case ButtonPress : cout << "Le bouton " << evt.xbutton.button << " est pressé au point " << evt.xbutton.x << ',' << evt.xbutton.y << endl; break;
Les événements • Fonction de traitement case Expose : if(evt.xexpose.count ==0) { /* on redessine toute la fenêtre */ } break;
Plan • Concepts des systèmes de fenêtre • ex : Serveurs X Windows d’Unix ou XWin32 de Windows • Surcouches de développement : Les Widgets. • Programmation
Les Widgets • Système graphique (Xlib, SDK) puissant, mais programmation laborieuse. • Boîtes à outil • boutons • menus • … … en appelant quelques fonctions simples.
Les Widgets • Boîtes à outil tous les objets graphiques sont assortis • Portabilité… parfois • Ex : Gtk+ existe sous X Windows et Windows.
Xlib Applications Les Widgets Protocole X Windows #include <X11/Xlib.h> Toolkits #include <gtk/gtk.h>
Les Widgets • Widgets (terme X) = objets graphiques, organisés de façon hiérarchique. • Quelques boîtes • Gtk+ : librairie C, X Windows et Windows • Xt, Motif : librairie C, X Windows • Swing : objets Java, portable... • MFC, Forms : librairie C++, Windows • C'est toujours le même principe...
Les Widgets • Les widgets sont des classes génériques, correspondant aux fenêtres. • On définit des callbacks, fonctions appelées quand quelque chose se produit • Ex : Le widget Bouton appelle un callback "press" quand on clique dessus.
Les Widgets • La librairie se charge de masquer la boucle d'événements, le programmeur ne programme que des callbacks • En C++ et Java, MonBouton hérite de Bouton, et je surcharge la méthode Activate de la classe Bouton • En C, il y a une fonction du genre AddCallback(button,ma_fonction,…).
Les Widgets • Structure d'un programme • Création des widgets • Définition des callbacks • Lancement de la boucle (parfois implicite)
Les Widgets • Types de Widgets : Boutons • Buttons • Radio Buttons • Check Buttons • Drawn Buttons • …
Les Widgets • Types de Widgets : Dialogues • Fenêtres filles de root • File selector • Warning message • Window • ...
Les Widgets • Types de Widgets : Containers • Widgets qui ont des fils, dont ils assurent la disposition à l'écran • Paned • Frames titre