Projet : Mini TOOL
Transcription
Projet : Mini TOOL
Projet : Mini T OOL -K IT G RAPHIQUE Valvassori Moı̈se Fri Oct 17 07:45:38 2003 Table des matières 1 Objectifs 1.1 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 2 Architecture et Fonctionnalités 2.1 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Fonctionnalités souhaitées . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Fonctionnalités non souhaitées . . . . . . . . . . . . . . . . . . . . . . 3 3 5 5 1 1 Objectifs L’objectif de ce projet est de programmer une bibliothèque1 graphique multi-plateforme. Cette bibliothèque propose des outils pour construire et gérer une interface graphique. La bibliothèque propose également des primitives de dessin2 . Le langage C ne possède pas de fonction graphique dans sa bibliothèque standard. Ainsi, le programmeur qui désire réaliser des applications graphiques doit utiliser une des nombreuses3 bibliothèques disponibles. Or ces dernières sont incompatibles entre elles. Un programme écrit avec l’une d’elle ne se compilera pas avec une autre. Pour les mêmes raisons, un programme écrit pour l’interface graphique d’un système d’exploitation ne se compilera pas sur un autre système d’exploitation. La bibliothèque construite dans ce projet se propose de résoudre ce problème en faisant un pont entre les différents systèmes. L’utilisateur de la bibliothèque appelle seulement les fonctions de la bibliothèque. Ces fonctions définissent les objets graphiques (widgets) fabriquant les interfaces. 1.1 Exemple Suivant les implémentations, nous pouvons imaginer que les figures ci-contre sont obtenues par le programme suivant : 1 5 #include <minitk.h> /* Appeler lorsqu’on appuie sur le bouton "Quitter" */ void fin(mntko *i){ minitk_sort_executable(0); } void main(int argc, int **argv){ mntko *princ,*cadre; 10 /* initialise l’application */ mntk_init(argc,argv); /* ouvre une fenêtre de taille 265x70 */ princ=mntk_ouvrir_fenetre(0,0,265,70,"Exemple", default_redraw); cadre=mntk_boite(princ,10,10,160,50,normal); /* place un bouton dans le cadre */ mntk_bouton(princ,180,10,75,20,"Quitter",fin); 15 20 /* place un text dans le cadre */ 1 La bibliothèque peut être soit : – un ensemble de fichiers objets ”.o” 2 suivant : – une bibliothèque telle que decrit dans le document http://www.ai.univ-paris8.fr/˜djedi/algo/Program-Library-HOWTO 2 3 exemple de primitives : tracer de segments de droite, cercles, images, textes. Le site Freshmeat recense 180 bibliothèques de ce style. mntk_texte(cadre,10,10,140,30,"Hello, World!!!",CENTER); /* affiche la fenêtre */ mntk_voir_fenetre(princ); /* attend les évènements */ mntk_gerer_evenement(); 25 } 2 Architecture et Fonctionnalités 2.1 Architecture F IG . 1 – Architecture générale de la bibliothèque La bibliothèque se divise en trois couches : 1. une couche d’interface. Elle contient les fonctions qui appellent la bibliothèque native. Elle comprend trois composants : (a) une boite à dessin. Ce composant contient les fonctions capables d’effectuer les opérations de dessin basiques comme : 3 – changer la couleur de dessin – tracer des segments de droites – tracer des arc d’ellipses – tracer des polygones remplis – tracer des arcs de disques – tracer un texte – changer la fonte du texte À ces fonctions de base, on peut rajouter le dessin dans une zone d’écran (clipping) ou une gestion des images. Avec ce jeu de fonction, on peut construire des fonctions utilitaires comme le tracer de rectangles ou de cercles (plein ou pas). (b) une gestion des évènements. Les interfaces graphiques sont contrôlées par des évènements comme l’appuie d’une touche ou une fenêtre rendu visible. Une abstraction des ces évènements doit être construite. Les évènements suivant sont géres : – fenêtre : ouverture, affichage, fermeture, déplacement, changement de taille – souris : entrer dans une zone, bouton appuyé, bouton relaché – clavier : touche appuyée, touche relachée (c) une gestion des fenêtres. Ce gestionnaire de fenêtre a la tâche d’ouvrir une fenêtre et de proposer une ou plusieurs zones pour dessiner. 2. des widgets bas niveaux. Ces widgets sont gérés et dessiner par la couche d’interface. Les widgets sont tous représentés par un type commun. Ce type commun contient toutes les caractéristiques communes à tous les widgets. Un élément de ce type permet de distinguer un widget d’un autre. Les widgets doivent utiliser et gerer les évènements le cas échéant. Par exemple, un bouton appelle une fonction4 si on clique dessus. Voici une liste non exhaustives de widgets bas niveaux : – zone libre – cadre – texte – bouton – menu simple – barre de progression 3. des widgets hauts niveaux. Ces widgets sont essentiellement construits en composant des widgets bas niveaux. Ils peuvent néanmoins faire appel à la couche d’interface. 4 en utilisant un pointeur de fonction par exemple. 4 – – – – 2.2 barre d’outils menu complexe zone de texte fenêtre virtuelle Fonctionnalités souhaitées – à chaque fois que c’est possible, les widgets de l’interface graphique pourront contenir d’autres widgets. Par exemple, un bouton peut contenir un texte et un dessin ou encore une fenêtre contient des boutons. – les widgets de l’interface graphique peuvent être indexés par une chaı̂ne de caractères. Les widgets peuvent également être retrouvés par cette chaı̂ne de caractères. 2.3 Fonctionnalités non souhaitées – L’implémentation de l’interface pour une bibliothèque native n’est pas requise pour valider le projet. C’est à dire qu’elle peut ne contenir que des fonctions vides. Néanmoins, des programmes d’exemples pourront être compilés. 5