xref: /petsc/src/sys/classes/draw/impls/x/ximpl.h (revision af0996ce37bc06907c37d8d91773840993d61e62)
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
9*af0996ceSBarry 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 
475c6c1daeSBarry Smith #define PetscDrawXiSetColor(Win,icolor) \
485c6c1daeSBarry Smith   { if (icolor >= 256 || icolor < 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Color value out of range"); \
495c6c1daeSBarry Smith     if ((Win)->gc.cur_pix != (Win)->cmapping[icolor]) {                  \
505c6c1daeSBarry Smith       XSetForeground((Win)->disp,(Win)->gc.set,(Win)->cmapping[icolor]); \
515c6c1daeSBarry Smith       (Win)->gc.cur_pix = (Win)->cmapping[icolor]; \
525c6c1daeSBarry Smith     }}
535c6c1daeSBarry Smith 
545c6c1daeSBarry Smith #define PetscDrawXiSetPixVal(Win,pix) \
555c6c1daeSBarry Smith   { if ((PetscDrawXiPixVal) (Win)->gc.cur_pix != pix) { \
565c6c1daeSBarry Smith       XSetForeground((Win)->disp,(Win)->gc.set,pix);    \
575c6c1daeSBarry Smith       (Win)->gc.cur_pix = pix; \
585c6c1daeSBarry Smith     }}
595c6c1daeSBarry Smith 
605c6c1daeSBarry Smith #endif
61