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