/******************************************
*
* 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