2023-12-02 10:05:42 +01:00
# ifndef _GRAPH_H
# define _GRAPH_H
# include <X11/Xlib.h>
# include <X11/Xutil.h>
# include <X11/keysym.h>
extern int _X ;
extern int _Y ;
# define NB_PIXMAP 10
typedef unsigned long couleur ;
typedef XPoint Point ;
int InitialiserGraphique ( ) ;
/* initialise le mode graphique : renvoie 1 en cas de succes, 0 sinon */
int CreerFenetre ( int posx , int posy , int X , int Y ) ;
/* creer la fenetre graphique de largeur X et longueur Y, et la positionne
2023-12-12 16:03:47 +01:00
sur l ' ecran au point ( posx , posy ) . Une seule fenetre autoris <EFBFBD> e */
2023-12-02 10:05:42 +01:00
void ChoisirTitreFenetre ( char * s ) ;
/* change le titre de la fenetre */
void ChoisirCurseur ( unsigned int forme ) ;
/* change le curseur de la fenetre */
void CacherFenetre ( void ) ;
/* cache la fenetre */
void AfficherFenetre ( void ) ;
/* affiche la fenetre */
void ChoisirEcran ( int n ) ;
/* fixe l'ecran ou le dessin est effectue : cette ecran est soit 0 (la fenetre
2023-12-12 16:03:47 +01:00
visible , ecran par defaut au demarrage ) , soit le numero de l ' <EFBFBD> cran virtuel correspondant */
2023-12-02 10:05:42 +01:00
void ChoisirCouleurDessin ( couleur c ) ;
/* fixe la couleur qui sert au dessin */
couleur CouleurParNom ( char * nom ) ;
/* fait la traduction d'une couleur a partir de son nom : le fichier rgb.txt
contient la liste des couleurs accessibles via leur nom */
couleur CouleurParComposante ( unsigned char r , unsigned char v , unsigned char b ) ;
2023-12-12 16:03:47 +01:00
/* renvoie la couleur d<> finie par ses trois composantes */
2023-12-02 10:05:42 +01:00
int Maxx ( ) ;
2023-12-12 16:03:47 +01:00
/* renvoie la largeur de l'ecran : il faut que le mode graphique ait <20> t<EFBFBD>
2023-12-02 10:05:42 +01:00
initialise ! ! ! */
int Maxy ( ) ;
2023-12-12 16:03:47 +01:00
/* renvoie la hauteur de l'ecran : il faut que le mode graphique ait <20> t<EFBFBD>
2023-12-02 10:05:42 +01:00
initialise ! ! ! */
void DessinerPixel ( int x , int y ) ;
/* allume un pixel avec la couleur de dessin */
void DessinerSegment ( int x , int y , int xx , int yy ) ;
/* idem precedent, mais avec la couleur de dessin */
void DessinerSegments ( Point * sommets , int nb_sommets ) ;
2023-12-12 16:03:47 +01:00
/* trace pour chaque paire sommet[i],sommet[i+1] le segment correspondant. Si le deux extr<74> mit<69> s correspondent, le polygone est ferm<72> */
2023-12-02 10:05:42 +01:00
void DessinerRectangle ( int x , int y , int l , int h ) ;
/* idem, mais utilise la couleur de dessin */
void RemplirRectangle ( int x , int y , int l , int h ) ;
/* trace un rectangle plein, rempli avec c */
void DessinerArc ( int x , int y , int l , int h , int angle1 , int angle2 ) ;
/* idem, mais utilise la couleur de dessin */
void RemplirArc ( int x , int y , int l , int h , int angle1 , int angle2 ) ;
/* trace un arc plein avec c */
void RemplirTriangle ( int x , int y , int xx , int yy , int xxx , int yyy ) ;
/* trace un triangle plein */
void RemplirPolygone ( Point * sommets , int nb_sommet ) ;
2023-12-12 16:03:47 +01:00
/* Trace un polygone plein d<> fini par son tableau de sommets. Si les extremit<69> s ne coincident pas, le polygone est ferm<72> automatiquement.
2023-12-02 10:05:42 +01:00
*/
int ToucheEnAttente ( ) ;
2023-12-12 16:03:47 +01:00
/* renvoie 1 si une touche a <20> t<EFBFBD> enfonc<6E> e, 0 sinon */
2023-12-02 10:05:42 +01:00
KeySym Touche ( ) ;
/* renvoie la premiere touche du tampon : cette fonction est bloquante =>
utiliser ToucheEnAttente pour la rendre non bloquante */
void EcrireTexte ( int x , int y , char * texte , int taille ) ;
/* ecrit la chaine texte au point (x,y) : taille indique la taille (0<->petit,1<->moyen,2<->grand) */
# ifdef HAVE_XPM
void SauverImage ( char * file , int x , int y , int l , int h ) ;
/* sauvegarde d'une partie de la fenetre (x,y,x+l,y+h) au format xpm */
# endif
int ChargerImage ( char * file , int x , int y , int xx , int yy , int l , int h ) ;
/* charge une partie (xx,yy,xx+l,yy+h) d'image au format xpm dans
la fenetre a la position ( x , y ) */
void ChargerImageFond ( char * file ) ;
/* charge une image qui remplit le fond de la fen\^etre, en la r\'ep\'etant si necessaire */
void EffacerEcran ( couleur c ) ;
/* efface l'ecran avec la couleur c*/
void ChoisirModeDessin ( int m ) ;
/* fixe le mode d'affichage : 0<->ecrasement 1<->xor */
int TailleChaineEcran ( char * t , int taile ) ;
2023-12-12 16:03:47 +01:00
/* renvoie, en pixel, la taille horizontale occupee par la chaine <20> l'<27> cran :taille est la taille de la police (0,1,2) */
2023-12-02 10:05:42 +01:00
int TailleSupPolice ( int taille ) ;
2023-12-12 16:03:47 +01:00
/* renvoie la taiile maximale de la police, en pixel, au dessus de la ligne d'<27> criture */
2023-12-02 10:05:42 +01:00
int TailleInfPolice ( int taille ) ;
2023-12-12 16:03:47 +01:00
/* renvoie la taille maximale de la police, en pixel, en dessous de la ligne d'<27> criture */
2023-12-02 10:05:42 +01:00
void CopierZone ( int src , int dst , int ox , int oy , int L , int H , int dx , int dy ) ;
2023-12-12 16:03:47 +01:00
/* copie une zone de l'<27> cran vers l'<27> cran dst. La zone copi<70> e est le rectangle delimite par le coin superieure hauche (ox,oy) et sa largeur l et hauteur h. Cette zone est copi<70> au point (dx,dy) de l'ecran dst */
2023-12-02 10:05:42 +01:00
void FermerGraphique ( ) ;
/* fermeture du mode graphique */
unsigned long Microsecondes ( ) ;
2023-12-12 16:03:47 +01:00
/* renvoie le nombre de microsecondes ecoul<75> es depuis le
2023-12-02 10:05:42 +01:00
lancement du programme */
void SourisPosition ( ) ;
/* recupere les coordonnees de la souris dans la fenetre et les place dans _X et _Y*/
int SourisCliquee ( ) ;
/* indique un clic de souris (1 si oui, 0 sinon), et recupere si c'est le cas la position au moment du clic dans _X et _Y */
2023-12-12 16:03:47 +01:00
/* fonctions a r<> <72> crire proprement */
2023-12-02 10:05:42 +01:00
int ChargerSprite ( char * file ) ;
2023-12-12 16:03:47 +01:00
/* charge un srpite en m<> moire, et renvoie son num<75> ro
2023-12-02 10:05:42 +01:00
* - 1 en cas d ' echec */
void AfficherSprite ( int n , int x , int y ) ;
2023-12-12 16:03:47 +01:00
/* affiche le sprite correspondant <20> son num<75> ro */
2023-12-02 10:05:42 +01:00
void LibererSprite ( int n ) ;
2023-12-12 16:03:47 +01:00
/* libere les ressources associ<63> es au sprite
2023-12-02 10:05:42 +01:00
* n */
# endif