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 #if !defined(_XIMPL_H) 85c6c1daeSBarry Smith #define _XIMPL_H 9af0996ceSBarry Smith #include <petsc/private/drawimpl.h> 105c6c1daeSBarry Smith 115c6c1daeSBarry Smith #include <X11/Xlib.h> 125c6c1daeSBarry Smith #include <X11/Xutil.h> 135c6c1daeSBarry Smith 145c6c1daeSBarry Smith typedef unsigned long PetscDrawXiPixVal; 155c6c1daeSBarry Smith 165c6c1daeSBarry Smith typedef struct { 175c6c1daeSBarry Smith GC set; 185c6c1daeSBarry Smith PetscDrawXiPixVal cur_pix; 195c6c1daeSBarry Smith } PetscDrawXiGC; 205c6c1daeSBarry Smith 215c6c1daeSBarry Smith typedef struct { 225c6c1daeSBarry Smith Font fnt; 235c6c1daeSBarry Smith int font_w,font_h; 245c6c1daeSBarry Smith int font_descent; 255c6c1daeSBarry Smith PetscDrawXiPixVal font_pix; 265c6c1daeSBarry Smith } PetscDrawXiFont; 275c6c1daeSBarry Smith 285c6c1daeSBarry Smith typedef struct { 295c6c1daeSBarry Smith Display *disp; 305c6c1daeSBarry Smith int screen; 315c6c1daeSBarry Smith Window win; 325c6c1daeSBarry Smith Visual *vis; /* Graphics visual */ 335c6c1daeSBarry Smith PetscDrawXiGC gc; 345c6c1daeSBarry Smith PetscDrawXiFont *font; 355c6c1daeSBarry Smith int depth; /* Depth of visual */ 36a297a907SKarl Rupp int numcolors; /* Number of available colors */ 37a297a907SKarl Rupp int maxcolors; /* Current number in use */ 385c6c1daeSBarry Smith Colormap cmap; 395c6c1daeSBarry Smith PetscDrawXiPixVal foreground,background; 405c6c1daeSBarry Smith PetscDrawXiPixVal cmapping[256]; 415c6c1daeSBarry Smith int x,y,w,h; /* Size and location of window */ 425c6c1daeSBarry Smith Drawable drw; 435c6c1daeSBarry Smith } PetscDraw_X; 445c6c1daeSBarry Smith 455c6c1daeSBarry Smith #define PetscDrawXiDrawable(w) ((w)->drw ? (w)->drw : (w)->win) 465c6c1daeSBarry Smith 4715d5bc79SLisandro Dalcin #define PetscDrawXiSetPixVal(W,pix) do { \ 4815d5bc79SLisandro Dalcin if ((W)->gc.cur_pix != (pix)) { \ 4915d5bc79SLisandro Dalcin XSetForeground((W)->disp,(W)->gc.set,pix); \ 5015d5bc79SLisandro Dalcin (W)->gc.cur_pix = pix; \ 5115d5bc79SLisandro Dalcin }} while (0) 525c6c1daeSBarry Smith 5315d5bc79SLisandro Dalcin #define PetscDrawXiSetColor(W,color) do { \ 5415d5bc79SLisandro Dalcin if ((color) >= 256 || (color) < 0) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Color value %D out of range [0..255]",(PetscInt)(color)); \ 5515d5bc79SLisandro Dalcin PetscDrawXiSetPixVal(W,(W)->cmapping[color]); \ 5615d5bc79SLisandro Dalcin } while (0) 575c6c1daeSBarry Smith 58*09440f25SLisandro Dalcin PETSC_INTERN PetscErrorCode PetscDrawXiInit(PetscDraw_X*,const char[]); 59*09440f25SLisandro Dalcin PETSC_INTERN PetscErrorCode PetscDrawXiClose(PetscDraw_X*); 60*09440f25SLisandro Dalcin PETSC_INTERN PetscErrorCode PetscDrawXiFontFixed(PetscDraw_X*,int,int,PetscDrawXiFont**); 61*09440f25SLisandro Dalcin PETSC_INTERN PetscErrorCode PetscDrawXiColormap(PetscDraw_X*); 62*09440f25SLisandro Dalcin PETSC_INTERN PetscErrorCode PetscDrawXiQuickWindow(PetscDraw_X*,char*,int,int,int,int); 63*09440f25SLisandro Dalcin PETSC_INTERN PetscErrorCode PetscDrawXiQuickWindowFromWindow(PetscDraw_X*,Window); 64*09440f25SLisandro Dalcin PETSC_INTERN PetscErrorCode PetscDrawXiQuickPixmap(PetscDraw_X*); 65*09440f25SLisandro Dalcin 665c6c1daeSBarry Smith #endif 67