xref: /petsc/src/sys/classes/draw/impls/x/ximpl.h (revision a297a907cb186f3b4c52d96a498269186c73a6c7)
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