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