Actual source code: ximpl.h
1: /*
2: Defines the internal data structures for the X-windows
3: implementation of the graphics functionality in PETSc.
4: */
6: #pragma once
7: #include <petsc/private/drawimpl.h>
9: #include <X11/Xlib.h>
10: #include <X11/Xutil.h>
12: typedef unsigned long PetscDrawXiPixVal;
14: typedef struct {
15: GC set;
16: PetscDrawXiPixVal cur_pix;
17: } PetscDrawXiGC;
19: typedef struct {
20: Font fnt;
21: int font_w, font_h;
22: int font_descent;
23: PetscDrawXiPixVal font_pix;
24: } PetscDrawXiFont;
26: typedef struct {
27: Display *disp; /* Display */
28: int screen; /* Screen of display */
29: Visual *vis; /* Graphics visual */
30: int depth; /* Depth of visual */
31: PetscDrawXiGC gc; /* Graphics context */
32: PetscDrawXiFont *font; /* Current font */
33: Window win; /* Window */
34: Drawable drw; /* Pixmap */
35: Colormap cmap; /* Colormap */
36: int cmapsize; /* Number of allocated colors */
37: PetscDrawXiPixVal foreground; /* Foreground pixel */
38: PetscDrawXiPixVal background; /* Background pixel */
39: PetscDrawXiPixVal cmapping[PETSC_DRAW_MAXCOLOR]; /* Map color -> pixel value */
40: unsigned char cpalette[PETSC_DRAW_MAXCOLOR][3]; /* Map color -> RGB value*/
41: int x, y, w, h; /* Location and size window */
42: } PetscDraw_X;
44: #define PetscDrawXiDrawable(w) ((w)->drw ? (w)->drw : (w)->win)
46: static inline void PetscDrawXiSetPixVal(PetscDraw_X *W, PetscDrawXiPixVal pix)
47: {
48: if (W->gc.cur_pix != pix) {
49: XSetForeground(W->disp, W->gc.set, pix);
50: W->gc.cur_pix = pix;
51: }
52: }
54: #if defined(PETSC_USE_DEBUG)
55: #define PetscDrawXiValidColor(W, color) PetscCheck((color) >= 0 && (color) < PETSC_DRAW_MAXCOLOR, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Color value %d out of range [0..%d]", color, PETSC_DRAW_MAXCOLOR - 1)
56: #else
57: #define PetscDrawXiValidColor(W, color) \
58: do { \
59: } while (0)
60: #endif
62: #define PetscDrawXiSetColor(W, color) \
63: do { \
64: PetscDrawXiValidColor(W, color); \
65: PetscDrawXiSetPixVal(W, (W)->cmapping[(color)]); \
66: } while (0)
68: PETSC_INTERN PetscErrorCode PetscDrawXiInit(PetscDraw_X *, const char[]);
69: PETSC_INTERN PetscErrorCode PetscDrawXiClose(PetscDraw_X *);
70: PETSC_INTERN PetscErrorCode PetscDrawXiFontFixed(PetscDraw_X *, int, int, PetscDrawXiFont **);
71: PETSC_INTERN PetscErrorCode PetscDrawXiColormap(PetscDraw_X *);
72: PETSC_INTERN PetscErrorCode PetscDrawXiQuickWindow(PetscDraw_X *, char *, int, int, int, int);
73: PETSC_INTERN PetscErrorCode PetscDrawXiQuickWindowFromWindow(PetscDraw_X *, Window);
74: PETSC_INTERN PetscErrorCode PetscDrawXiQuickPixmap(PetscDraw_X *);
75: PETSC_INTERN PetscErrorCode PetscDrawXiResizeWindow(PetscDraw_X *, int, int);
76: PETSC_INTERN PetscErrorCode PetscDrawXiGetGeometry(PetscDraw_X *, int *, int *, int *, int *);