Page d'accueil Description du projet
/******************************************
 *
 *   Cedric Pradalier   2001
 *   mail : http://cedric.pradalier.free.fr/mail.html
 *
 *****************************************/

/* Creation d'une librairie pour faciliter les acces aux fenetres graphiques
   Compilation avec :
      graphic_contextc -lX11 -lsocket <nom_fichier>
   -lsocket : particularite du Sun apparement
   
Cedric Pradalier : Fevrier 99 
*/

#ifndef GRAPH_H
#define GRAPH_H


#include "X11/Xlib.h"
#include <stdio.h>
/*#include "graph.c"*/
#include "X11/Xutil.h"
   
/*************************************************\
 Variables globales : definition de l'environnement   
\*************************************************/
   
   
   /*Couleur courante de premier plan et de fond*/
   extern long Current_FGColor, Current_BGColor;
   
   /*Coordonn~Bes de la fenetre courante*/
   extern int winX,winY, winHeight,winWidth;

   /*Definition de la communication serveur */
   extern Display * display;
   
   /*Definition de la fenetre courante*/
   extern Window win;
   
   /*Table de couleur courante*/
   extern Colormap clm;
   
   
   /*Definition du contexte graphique courant*/
   extern GC graphic_context;
   
   /*Sauvegarde du fond*/
   extern Pixmap Screen_Save;
   
   /*Image pour la sauvegarde*/
   extern XImage Screen_Mem;
   
   /*Definition des polices utilisees*/
   extern XFontStruct * fd;
   


/*************************************************\
  Fonctions graphiques
\*************************************************/



void SetColor(char * nom);
/* Defini la couleur de dessin
   nom est une chaine 
   si nom commence par # (Ex, #FF0EA7) , la fonction s'attend
      a l'expression des composantes rouge,vert,bleu de la couleur
      en hexadecimal : #RRGGBB
   sinon, nom est recherche dans la table des noms courants accessible 
      par la commande UNIX : showrgb | m
      Ex "aquamarine4"
   Si l'allocation de la couleur a echouee, la couleur choisie est le blanc.
*/   

void SetBkColor(char * nom);
/* Defini la couleur de fond 
   Meme comportement que SetColor
*/


void SetColorByIndex(int i);
/*
 Definit la couleur d'affichage a partir de la couleur de la position 
 i de la palette courante;
*/

void StoreColor(int red, int green, int short blue, int position);
/* stocke la couleur de coordonnes R,G,B red,green,blue dans la table
   de couleur courante a la position position
   Attention ces valeurs sont comprises entre 0 et 65535 donc pour avoir
   un gri moyen il faut  (128 * 256 , 128 * 256 , 128 * 256)
*/



char OpenGraph(int x,int y,int width,int height,char * fgcolor, char * bgcolor,char create_colmap);
/*
 + Ouvre une fenetre graphique, cense etre situee en (x,y)
 de largeur width et de hauteur helght.
 + fgcolor et bgcolor sont les couleurs de dessins et de fond 
   et repondent aux memes contraintes que nom dans SetColor
 La Fenetre doit etre fermee avec CloseGraph.
*/

void SaveImage(int x,int y,int width,int height,char* nom);
/*
 + Sauvegarde la partie graphique de l'image comprise
   dans le rectangle dont le coin en haut a gauche a pour 
   coordonnee (x,y) de largeur width et de hauteur height
   dans le fichier nomme nom (attention la sauvegarde est au format
   tga : il vaut mieux que le nom finisse par ".tga"
 + Danger : toute l'image doit existe dans le graphique :
   Les coordonnees doivent etre valide
*/







void Redraw();
/*   
 Redessine la fenetre courante
*/

void Flush();
/* attend la fin de l'affichage */


void ClearEvents();
/* attend la fin de l'affichage et vide tous les evenments de la queue*/




char OpenGraphBW(int x,int y,int width,int height);
/* 
 Ouvre une fenetre graphique comme openGraph().
 La couleur de fond est : blanc
 La couleur de dessin est : noir
*/


void CloseGraph();
/*
 Ferme la fenetre graphique
 Tout appel posterieur a une des primitives suivantes
 risques de provoquer une erreur systeme.



/************************************************\
+Toute les fonctions suivantes sont des fonctions de
dessin les point sont designes par leurs coordonnees 
(x,y) ou (x1,y1)... Les coordonnes sont des nombres
positifs comptes a partir du point en haut a gauche.
+Le dessin est fait dans la couleur courante.
\************************************************/


void PutPixel(int x,int y);
/*
 Dessine un point 
*/




void DrawLine(int x1,int y1,int x2,int y2);
/*
 Dessine une ligne
*/

void DrawRectangle(int x,int y,int width,int height);
/*
 Dessine un rectangle
 (x,y) est le point en haut a gauche
 width et height sont les hauteurs et largeurs du rectangle.
*/



void DrawArc(int x,int y,int a, int b ,int debut,int fin);
/*
 Dessine l'ellipse centre en (x,y) 
 de demi-grand-axe a et  de demi-petit-axe b
 entre les angles debut et fin en degres.
*/

void DrawCircle(int x,int y,int r);
/*
 Dessine un cercle de rayon r
 centre en (x,y)
*/

void DrawString(int x,int y,char * s);
/*
Affiche la chaine s en (x,y) en la supperposant au dessin original
*/


void DrawImageString(int x,int y,char * s);
/*
Affiche la chaine s en (x,y) en effacant le dessin original
*/


void FillRectangle(int x, int y, int width, int height);
/*
 Rempli un rectangle (cf DrawRectangle) 
*/


void ClearGraph();
/*
Efface la fenetre courante
*/


void FillCircle(int x,int y,int r);
/*
 * Remplit un cercle
 */

void FillArc(int x, int y, int a, int b, int debut, int fin);
/*
Comme DrawArc, en remplissant la part d'ellipse
*/

/*
typedef struc {
 short x,y;
 } XPoint;

*/

void FillPolygon(XPoint * points, int npoints,int shape,int mode);
/*
Rempli le Polygone defini par les points A1,A2,..An de type XPoint
Avec A1 different de An. Exemple : voirFillTriangle
+ npoints vaut n
+ shape vaut Convex, Noconvex ou Complex selon l'algorithme de 
  remplissage a utilise
+ mode vaut CoordModeOrigin ou CoordModeRelative selon que les
  coordonnees des points sont definies a partirdu point precedent
  ou par une origine absolue
*/


/*
Dessine un triangle (x1,y1),...
*/

void DrawTriangle(int x1,int y1, int x2, int y2, int x3, int y3);


/* 
 Comme DrawTriangle en remplissant
*/
void FillTriangle(int x1,int y1, int x2, int y2, int x3, int y3);


/*
Attend un click Droit,Gauche,Milieu de la souris
*/
void WaitRClick();
void WaitLClick();
void WaitMClick();

/*
Attend un Click du bouton Gauche ou Milieu ou Droit
Ex : WaitClick(1,0,1) attend un click gauche ou droit mais 
pas milieu 
*/
void WaitClick(int L, int M, int R);

/*
Test s'il y a eu un click dans la fenetre :
 Click du bouton Gauche ou Milieu ou Droit
Ex : MouseClick(1,0,1) test un click gauche ou droit mais 
pas milieu 
il faut l'executer une premiere fois avant de tester, pour
initialiser le masque d'evenement
*/
char MouseClick(int L, int M, int R);




#endif