15c6c1daeSBarry Smith 25c6c1daeSBarry Smith /* 35c6c1daeSBarry Smith Defines the internal data structures for the X-windows 45c6c1daeSBarry Smith implementation of the graphics functionality in PETSc. 55c6c1daeSBarry Smith */ 65c6c1daeSBarry Smith 75c6c1daeSBarry Smith #include <petsc-private/drawimpl.h> 85c6c1daeSBarry Smith 95c6c1daeSBarry Smith #if !defined(_XIMPL_H) 105c6c1daeSBarry Smith #define _XIMPL_H 115c6c1daeSBarry Smith 125c6c1daeSBarry Smith #include <sys/types.h> 135c6c1daeSBarry Smith #include <X11/Xlib.h> 145c6c1daeSBarry Smith #include <X11/Xutil.h> 155c6c1daeSBarry Smith 165c6c1daeSBarry Smith typedef unsigned long PetscDrawXiPixVal; 175c6c1daeSBarry Smith 185c6c1daeSBarry Smith typedef struct { 195c6c1daeSBarry Smith GC set; 205c6c1daeSBarry Smith PetscDrawXiPixVal cur_pix; 215c6c1daeSBarry Smith } PetscDrawXiGC; 225c6c1daeSBarry Smith 235c6c1daeSBarry Smith typedef struct { 245c6c1daeSBarry Smith Font fnt; 255c6c1daeSBarry Smith int font_w,font_h; 265c6c1daeSBarry Smith int font_descent; 275c6c1daeSBarry Smith PetscDrawXiPixVal font_pix; 285c6c1daeSBarry Smith } PetscDrawXiFont; 295c6c1daeSBarry Smith 305c6c1daeSBarry Smith typedef struct { 315c6c1daeSBarry Smith Display *disp; 325c6c1daeSBarry Smith int screen; 335c6c1daeSBarry Smith Window win; 345c6c1daeSBarry Smith Visual *vis; /* Graphics visual */ 355c6c1daeSBarry Smith PetscDrawXiGC gc; 365c6c1daeSBarry Smith PetscDrawXiFont *font; 375c6c1daeSBarry Smith int depth; /* Depth of visual */ 38*a297a907SKarl Rupp int numcolors; /* Number of available colors */ 39*a297a907SKarl Rupp int maxcolors; /* Current number in use */ 405c6c1daeSBarry Smith Colormap cmap; 415c6c1daeSBarry Smith PetscDrawXiPixVal foreground,background; 425c6c1daeSBarry Smith PetscDrawXiPixVal cmapping[256]; 435c6c1daeSBarry Smith int x,y,w,h; /* Size and location of window */ 445c6c1daeSBarry Smith Drawable drw; 455c6c1daeSBarry Smith } PetscDraw_X; 465c6c1daeSBarry Smith 475c6c1daeSBarry Smith #define PetscDrawXiDrawable(w) ((w)->drw ? (w)->drw : (w)->win) 485c6c1daeSBarry Smith 495c6c1daeSBarry Smith #define PetscDrawXiSetColor(Win,icolor) \ 505c6c1daeSBarry Smith { if (icolor >= 256 || icolor < 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Color value out of range"); \ 515c6c1daeSBarry Smith if ((Win)->gc.cur_pix != (Win)->cmapping[icolor]) { \ 525c6c1daeSBarry Smith XSetForeground((Win)->disp,(Win)->gc.set,(Win)->cmapping[icolor]); \ 535c6c1daeSBarry Smith (Win)->gc.cur_pix = (Win)->cmapping[icolor]; \ 545c6c1daeSBarry Smith }} 555c6c1daeSBarry Smith 565c6c1daeSBarry Smith #define PetscDrawXiSetPixVal(Win,pix) \ 575c6c1daeSBarry Smith { if ((PetscDrawXiPixVal) (Win)->gc.cur_pix != pix) { \ 585c6c1daeSBarry Smith XSetForeground((Win)->disp,(Win)->gc.set,pix); \ 595c6c1daeSBarry Smith (Win)->gc.cur_pix = pix; \ 605c6c1daeSBarry Smith }} 615c6c1daeSBarry Smith 625c6c1daeSBarry Smith #endif 63