xref: /petsc/src/sys/classes/draw/impls/x/ximpl.h (revision 5c6c1daec53e1d9ab0bec9db5309fd8fc7645b8d)
1*5c6c1daeSBarry Smith 
2*5c6c1daeSBarry Smith /*
3*5c6c1daeSBarry Smith       Defines the internal data structures for the X-windows
4*5c6c1daeSBarry Smith    implementation of the graphics functionality in PETSc.
5*5c6c1daeSBarry Smith */
6*5c6c1daeSBarry Smith 
7*5c6c1daeSBarry Smith #include <petsc-private/drawimpl.h>
8*5c6c1daeSBarry Smith 
9*5c6c1daeSBarry Smith #if !defined(_XIMPL_H)
10*5c6c1daeSBarry Smith #define _XIMPL_H
11*5c6c1daeSBarry Smith 
12*5c6c1daeSBarry Smith #include <sys/types.h>
13*5c6c1daeSBarry Smith #include <X11/Xlib.h>
14*5c6c1daeSBarry Smith #include <X11/Xutil.h>
15*5c6c1daeSBarry Smith 
16*5c6c1daeSBarry Smith typedef unsigned long PetscDrawXiPixVal;
17*5c6c1daeSBarry Smith 
18*5c6c1daeSBarry Smith typedef struct {
19*5c6c1daeSBarry Smith     GC                set;
20*5c6c1daeSBarry Smith     PetscDrawXiPixVal cur_pix;
21*5c6c1daeSBarry Smith } PetscDrawXiGC;
22*5c6c1daeSBarry Smith 
23*5c6c1daeSBarry Smith typedef struct {
24*5c6c1daeSBarry Smith   Font              fnt;
25*5c6c1daeSBarry Smith   int               font_w,font_h;
26*5c6c1daeSBarry Smith   int               font_descent;
27*5c6c1daeSBarry Smith   PetscDrawXiPixVal font_pix;
28*5c6c1daeSBarry Smith } PetscDrawXiFont;
29*5c6c1daeSBarry Smith 
30*5c6c1daeSBarry Smith typedef struct {
31*5c6c1daeSBarry Smith     Display           *disp;
32*5c6c1daeSBarry Smith     int               screen;
33*5c6c1daeSBarry Smith     Window            win;
34*5c6c1daeSBarry Smith     Visual            *vis;            /* Graphics visual */
35*5c6c1daeSBarry Smith     PetscDrawXiGC     gc;
36*5c6c1daeSBarry Smith     PetscDrawXiFont   *font;
37*5c6c1daeSBarry Smith     int               depth;           /* Depth of visual */
38*5c6c1daeSBarry Smith     int               numcolors,      /* Number of available colors */
39*5c6c1daeSBarry Smith                       maxcolors;       /* Current number in use */
40*5c6c1daeSBarry Smith     Colormap          cmap;
41*5c6c1daeSBarry Smith     PetscDrawXiPixVal foreground,background;
42*5c6c1daeSBarry Smith     PetscDrawXiPixVal cmapping[256];
43*5c6c1daeSBarry Smith     int               x,y,w,h;      /* Size and location of window */
44*5c6c1daeSBarry Smith     Drawable          drw;
45*5c6c1daeSBarry Smith } PetscDraw_X;
46*5c6c1daeSBarry Smith 
47*5c6c1daeSBarry Smith #define PetscDrawXiDrawable(w) ((w)->drw ? (w)->drw : (w)->win)
48*5c6c1daeSBarry Smith 
49*5c6c1daeSBarry Smith #define PetscDrawXiSetColor(Win,icolor)\
50*5c6c1daeSBarry Smith   {if (icolor >= 256 || icolor < 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Color value out of range");\
51*5c6c1daeSBarry Smith    if ((Win)->gc.cur_pix != (Win)->cmapping[icolor]) { \
52*5c6c1daeSBarry Smith      XSetForeground((Win)->disp,(Win)->gc.set,(Win)->cmapping[icolor]); \
53*5c6c1daeSBarry Smith      (Win)->gc.cur_pix   = (Win)->cmapping[icolor];\
54*5c6c1daeSBarry Smith   }}
55*5c6c1daeSBarry Smith 
56*5c6c1daeSBarry Smith #define PetscDrawXiSetPixVal(Win,pix)\
57*5c6c1daeSBarry Smith   {if ((PetscDrawXiPixVal) (Win)->gc.cur_pix != pix) { \
58*5c6c1daeSBarry Smith      XSetForeground((Win)->disp,(Win)->gc.set,pix); \
59*5c6c1daeSBarry Smith      (Win)->gc.cur_pix   = pix;\
60*5c6c1daeSBarry Smith   }}
61*5c6c1daeSBarry Smith 
62*5c6c1daeSBarry Smith #endif
63