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