xref: /petsc/src/sys/classes/draw/impls/x/ximpl.h (revision 15d5bc7987684e36335e48c93f0d6e15cde33d97)
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 
47*15d5bc79SLisandro Dalcin #define PetscDrawXiSetPixVal(W,pix) do {         \
48*15d5bc79SLisandro Dalcin     if ((W)->gc.cur_pix != (pix)) {              \
49*15d5bc79SLisandro Dalcin       XSetForeground((W)->disp,(W)->gc.set,pix); \
50*15d5bc79SLisandro Dalcin       (W)->gc.cur_pix = pix;                     \
51*15d5bc79SLisandro Dalcin     }} while (0)
525c6c1daeSBarry Smith 
53*15d5bc79SLisandro Dalcin #define PetscDrawXiSetColor(W,color) do {         \
54*15d5bc79SLisandro Dalcin     if ((color) >= 256 || (color) < 0) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Color value %D out of range [0..255]",(PetscInt)(color)); \
55*15d5bc79SLisandro Dalcin     PetscDrawXiSetPixVal(W,(W)->cmapping[color]); \
56*15d5bc79SLisandro Dalcin     } while (0)
575c6c1daeSBarry Smith 
585c6c1daeSBarry Smith #endif
59