/* xscreensaver, Copyright (c) 1991-2018 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* JWXYZ Is Not Xlib. But it's a bunch of function definitions that bear some resemblance to Xlib and that do Cocoa-ish or OpenGL-ish things that bear some resemblance to the things that Xlib might have done. */ #ifndef __JWXYZ_H__ #define __JWXYZ_H__ #include /* For abort(). */ #include #if defined __FreeBSD__ || defined __MACH__ && defined __APPLE__ # include #endif #ifndef __dead2 /* __dead2 is an undocumented FreeBSD-ism (and by extension, an OSX-ism), normally #defined in . */ # if defined __GNUC__ || defined __clang__ # define __dead2 __attribute__((__noreturn__)) # else # define __dead2 # endif #endif extern void jwxyz_abort(const char *fmt, ...) __dead2; #define abort() jwxyz_abort("abort in %s:%d", __FUNCTION__, __LINE__) typedef int Bool; typedef int Status; typedef void * XPointer; typedef unsigned long Time; typedef unsigned int KeySym; typedef unsigned int KeyCode; typedef unsigned long Atom; /* Must be as large as a char *. */ typedef struct jwxyz_Display Display; typedef struct jwxyz_Display Screen; typedef struct jwxyz_Visual Visual; typedef struct jwxyz_Drawable * Drawable; typedef struct jwxyz_Colormap * Colormap; typedef struct jwxyz_GC * GC; typedef struct jwxyz_XColor XColor; typedef struct jwxyz_XGCValues XGCValues; typedef struct jwxyz_XPoint XPoint; typedef struct jwxyz_XSegment XSegment; typedef struct jwxyz_XRectangle XRectangle; typedef struct jwxyz_XArc XArc; typedef struct jwxyz_XWindowAttributes XWindowAttributes; typedef struct jwxyz_XrmOptionDescRec XrmOptionDescRec; typedef struct jwxyz_XrmDatabase * XrmDatabase; typedef struct jwxyz_XImage XImage; typedef struct jwxyz_XFontProp XFontProp; typedef struct jwxyz_XFontStruct XFontStruct; typedef struct jwxyz_Font * Font; typedef struct jwxyz_XFontSet * XFontSet; typedef struct jwxyz_XCharStruct XCharStruct; typedef struct jwxyz_XComposeStatus XComposeStatus; typedef struct jwxyz_XPixmapFormatValues XPixmapFormatValues; typedef struct jwxyz_XChar2b XChar2b; typedef union jwxyz_XEvent XEvent; typedef struct jwxyz_XAnyEvent XAnyEvent; typedef struct jwxyz_XKeyEvent XKeyEvent; typedef struct jwxyz_XMotionEvent XMotionEvent; typedef struct jwxyz_XButtonEvent XButtonEvent; typedef XKeyEvent XKeyPressedEvent; typedef XKeyEvent XKeyReleasedEvent; typedef XMotionEvent XPointerMovedEvent; typedef XButtonEvent XButtonPressedEvent; typedef XButtonEvent XButtonReleasedEvent; /* Not technically Xlib... */ typedef struct jwxyz_GLXContext * GLXContext; typedef struct jwxyz_XtAppContext * XtAppContext; typedef struct jwxyz_XtIntervalId * XtIntervalId; typedef struct jwxyz_XtInputId * XtInputId; typedef void * XtPointer; typedef unsigned long XtInputMask; typedef struct jwxyz_linked_point linked_point; #define XtInputReadMask (1L<<0) #define XtInputWriteMask (1L<<1) #define XtInputExceptMask (1L<<2) #define XtIMXEvent 1 #define XtIMTimer 2 #define XtIMAlternateInput 4 #define XtIMSignal 8 #define XtIMAll (XtIMXEvent | XtIMTimer | XtIMAlternateInput | XtIMSignal) #define True 1 #define TRUE 1 #define False 0 #define FALSE 0 #define None 0 #define Window Drawable #define Pixmap Drawable #define XrmoptionNoArg 0 #define XrmoptionSepArg 1 #define CoordModeOrigin 0 #define CoordModePrevious 1 #define LineSolid 0 #define LineOnOffDash 1 #define LineDoubleDash 2 #define CapNotLast 0 #define CapButt 1 #define CapRound 2 #define CapProjecting 3 #define JoinMiter 0 #define JoinRound 1 #define JoinBevel 2 #define FillSolid 0 #define FillTiled 1 #define FillStippled 2 #define FillOpaqueStippled 3 #define EvenOddRule 0 #define WindingRule 1 #define Complex 0 #define Nonconvex 1 #define Convex 2 #define XYBitmap 0 #define XYPixmap 1 #define ZPixmap 2 #define AllocNone 0 #define AllocAll 1 #define StaticGray 0 #define GrayScale 1 #define StaticColor 2 #define PseudoColor 3 #define TrueColor 4 #define DirectColor 5 #define LSBFirst 0 #define MSBFirst 1 #define DoRed (1<<0) #define DoGreen (1<<1) #define DoBlue (1<<2) #define GCFunction (1L<<0) #define GCPlaneMask (1L<<1) #define GCForeground (1L<<2) #define GCBackground (1L<<3) #define GCLineWidth (1L<<4) #define GCLineStyle (1L<<5) #define GCCapStyle (1L<<6) #define GCJoinStyle (1L<<7) #define GCFillStyle (1L<<8) #define GCFillRule (1L<<9) #define GCTile (1L<<10) #define GCStipple (1L<<11) #define GCTileStipXOrigin (1L<<12) #define GCTileStipYOrigin (1L<<13) #define GCFont (1L<<14) #define GCSubwindowMode (1L<<15) #define GCGraphicsExposures (1L<<16) #define GCClipXOrigin (1L<<17) #define GCClipYOrigin (1L<<18) #define GCClipMask (1L<<19) #define GCDashOffset (1L<<20) #define GCDashList (1L<<21) #define GCArcMode (1L<<22) #define KeyPress 2 #define KeyRelease 3 #define ButtonPress 4 #define ButtonRelease 5 #define MotionNotify 6 #define Expose 12 #define GraphicsExpose 13 #define NoExpose 14 #define VisibilityNotify 15 #define ClipByChildren 0 #define IncludeInferiors 1 #define KeyPressMask (1L<<0) #define KeyReleaseMask (1L<<1) #define ButtonPressMask (1L<<2) #define ButtonReleaseMask (1L<<3) #define PointerMotionMask (1L<<6) #define Button1 1 #define Button2 2 #define Button3 3 #define Button4 4 #define Button5 5 #define ShiftMask (1<<0) #define LockMask (1<<1) #define ControlMask (1<<2) #define Mod1Mask (1<<3) #define Mod2Mask (1<<4) #define Mod3Mask (1<<5) #define Mod4Mask (1<<6) #define Mod5Mask (1<<7) #define Button1Mask (1<<8) #define Button2Mask (1<<9) #define Button3Mask (1<<10) #define Button4Mask (1<<11) #define Button5Mask (1<<12) #define XK_Shift_L 0xFFE1 #define XK_Shift_R 0xFFE2 #define XK_Control_L 0xFFE3 #define XK_Control_R 0xFFE4 #define XK_Caps_Lock 0xFFE5 #define XK_Shift_Lock 0xFFE6 #define XK_Meta_L 0xFFE7 #define XK_Meta_R 0xFFE8 #define XK_Alt_L 0xFFE9 #define XK_Alt_R 0xFFEA #define XK_Super_L 0xFFEB #define XK_Super_R 0xFFEC #define XK_Hyper_L 0xFFED #define XK_Hyper_R 0xFFEE #define XK_Home 0xFF50 #define XK_Left 0xFF51 #define XK_Up 0xFF52 #define XK_Right 0xFF53 #define XK_Down 0xFF54 #define XK_Prior 0xFF55 #define XK_Page_Up 0xFF55 #define XK_Next 0xFF56 #define XK_Page_Down 0xFF56 #define XK_End 0xFF57 #define XK_Begin 0xFF58 #define XK_F1 0xFFBE #define XK_F2 0xFFBF #define XK_F3 0xFFC0 #define XK_F4 0xFFC1 #define XK_F5 0xFFC2 #define XK_F6 0xFFC3 #define XK_F7 0xFFC4 #define XK_F8 0xFFC5 #define XK_F9 0xFFC6 #define XK_F10 0xFFC7 #define XK_F11 0xFFC8 #define XK_F12 0xFFC9 #define GXclear 0x0 /* 0 */ #define GXand 0x1 /* src AND dst */ // #define GXandReverse 0x2 /* src AND NOT dst */ #define GXcopy 0x3 /* src */ // #define GXandInverted 0x4 /* NOT src AND dst */ // #define GXnoop 0x5 /* dst */ #define GXxor 0x6 /* src XOR dst */ #define GXor 0x7 /* src OR dst */ // #define GXnor 0x8 /* NOT src AND NOT dst */ // #define GXequiv 0x9 /* NOT src XOR dst */ // #define GXinvert 0xa /* NOT dst */ // #define GXorReverse 0xb /* src OR NOT dst */ // #define GXcopyInverted 0xc /* NOT src */ // #define GXorInverted 0xd /* NOT src OR dst */ // #define GXnand 0xe /* NOT src OR NOT dst */ #define GXset 0xf /* 1 */ #define XA_FONT 18 #define DefaultScreen(dpy) (0) #define BlackPixelOfScreen XBlackPixelOfScreen #define WhitePixelOfScreen XWhitePixelOfScreen #define BlackPixel(dpy,n) BlackPixelOfScreen(ScreenOfDisplay(dpy,n)) #define WhitePixel(dpy,n) WhitePixelOfScreen(ScreenOfDisplay(dpy,n)) #define CellsOfScreen XCellsOfScreen #define XFree(x) free(x) #define BitmapPad(dpy) (8) #define BitmapBitOrder(dpy) (MSBFirst) #define ImageByteOrder(dpy) (MSBFirst) #define DisplayOfScreen XDisplayOfScreen #define DefaultScreenOfDisplay XDefaultScreenOfDisplay #define ScreenOfDisplay(dpy,n) DefaultScreenOfDisplay(dpy) #define DefaultVisualOfScreen XDefaultVisualOfScreen #define DefaultColormapOfScreen(s) (0) #define RootWindow XRootWindow #define RootWindowOfScreen(s) RootWindow(DisplayOfScreen(s),0) #define DisplayWidth XDisplayWidth #define DisplayHeight XDisplayHeight #define XMaxRequestSize(dpy) (65535) #define XWidthOfScreen(s) (DisplayWidth(DisplayOfScreen(s),0)) #define XHeightOfScreen(s) (DisplayHeight(DisplayOfScreen(s),0)) #define XWidthMMOfScreen(s) (XDisplayWidthMM(DisplayOfScreen(s),0)) #define XHeightMMOfScreen(s) (XDisplayHeightMM(DisplayOfScreen(s),0)) #define XDefaultScreenOfDisplay(d) (d) #define XDisplayOfScreen(s) (s) #define XDisplayNumberOfScreen(s) 0 #define XScreenNumberOfScreen(s) 0 extern int XDisplayWidth (Display *, int); extern int XDisplayHeight (Display *, int); extern int XDisplayWidthMM (Display *, int); extern int XDisplayHeightMM (Display *, int); unsigned long XBlackPixelOfScreen(Screen *); unsigned long XWhitePixelOfScreen(Screen *); unsigned long XCellsOfScreen(Screen *); extern int XDrawPoint (Display *, Drawable, GC, int x, int y); extern int XChangeGC (Display *, GC, unsigned long mask, XGCValues *); extern int XClearArea (Display *, Window, int x, int y, int w, int h,Bool exp); extern int XSetWindowBackground (Display *, Window, unsigned long); extern Status XGetWindowAttributes (Display *, Window, XWindowAttributes *); extern Status XGetGeometry (Display *, Drawable, Window *root_ret, int *x_ret, int *y_ret, unsigned int *w_ret, unsigned int *h_ret, unsigned int *bw_ret, unsigned int *depth_ret); extern Status XAllocColor (Display *, Colormap, XColor *); extern Status XAllocColorCells (Display *, Colormap, Bool contig, unsigned long *pmret, unsigned int npl, unsigned long *pxret, unsigned int npx); extern int XStoreColors (Display *, Colormap, XColor *, int n); extern int XStoreColor (Display *, Colormap, XColor *); extern Status XParseColor(Display *, Colormap, const char *spec, XColor *ret); extern Status XAllocNamedColor (Display *, Colormap, char *name, XColor *screen_ret, XColor *exact_ret); extern int XQueryColor (Display *, Colormap, XColor *); extern int XQueryColors(Display *, Colormap colormap, XColor *, int ncolors); extern int XSetForeground (Display *, GC, unsigned long); extern int XSetBackground (Display *, GC, unsigned long); extern int XSetFunction (Display *, GC, int); extern int XSetSubwindowMode (Display *, GC, int); extern int XSetLineAttributes (Display *, GC, unsigned int line_width, int line_style, int cap_style, int join_style); extern int jwxyz_XSetAlphaAllowed (Display *, GC, Bool); extern int jwxyz_XSetAntiAliasing (Display *, GC, Bool); extern int XFlush (Display *); extern int XSync (Display *, Bool); extern int XFreeColors (Display *, Colormap, unsigned long *px, int n, unsigned long planes); extern int XCopyArea (Display *, Drawable src, Drawable dest, GC, int src_x, int src_y, unsigned int width, unsigned int height, int dest_x, int dest_y); extern int XCopyPlane (Display *, Drawable, Drawable, GC, int src_x, int src_y, unsigned width, int height, int dest_x, int dest_y, unsigned long plane); extern int XDrawLine (Display *, Drawable, GC, int x1, int y1, int x2, int y2); extern int XDrawArc (Display *, Drawable, GC, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2); extern int XFillArc (Display *, Drawable, GC, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2); extern int XDrawArcs (Display *, Drawable, GC, XArc *arcs, int narcs); extern int XFillArcs (Display *, Drawable, GC, XArc *arcs, int narcs); extern int XDrawRectangle (Display *, Drawable, GC, int x, int y, unsigned int width, unsigned int height); extern int XFillRectangle (Display *, Drawable, GC, int x, int y, unsigned int width, unsigned int height); extern int XFillRectangles (Display *, Drawable, GC, XRectangle *, int n); extern int XDrawString (Display *, Drawable, GC, int x, int y, const char *, int len); extern int XDrawImageString (Display *, Drawable, GC, int x, int y, const char *, int len); extern int XDrawString16 (Display *, Drawable, GC, int x, int y, const XChar2b *, int len); extern Bool XQueryPointer (Display *, Window, Window *root_ret, Window *child_ret, int *root_x_ret, int *root_y_ret, int *win_x_ret, int *win_y_ret, unsigned int *mask_ret); extern int XLookupString (XKeyEvent *, char *ret, int size, KeySym *ks_ret, XComposeStatus *); extern KeySym XKeycodeToKeysym (Display *, KeyCode, int index); extern Status XInitImage (XImage *); extern XImage *XCreateImage (Display *, Visual *, unsigned int depth, int format, int offset, char *data, unsigned int width, unsigned int height, int bitmap_pad, int bytes_per_line); extern XImage *XSubImage (XImage *, int x, int y, unsigned int w, unsigned int h); extern unsigned long XGetPixel (XImage *, int x, int y); extern int XPutPixel (XImage *, int x, int y, unsigned long); extern int XDestroyImage (XImage *); extern XImage *XGetImage (Display *, Drawable, int x, int y, unsigned int w, unsigned int h, unsigned long pm, int fmt); extern Pixmap XCreatePixmapFromBitmapData (Display *, Drawable, const char *data, unsigned int w, unsigned int h, unsigned long fg, unsigned long bg, unsigned int depth); extern XPixmapFormatValues *XListPixmapFormats (Display *, int *count_ret); extern void jwxyz_draw_NSImage_or_CGImage (Display *, Drawable, Bool nsimg_p, void *NSImage_arg, XRectangle *geom_ret, int exif_rotation); extern XImage *jwxyz_png_to_ximage (Display *, Visual *, const unsigned char *, unsigned long size); extern int XSetGraphicsExposures (Display *, GC, Bool); extern Bool XTranslateCoordinates (Display *, Window src_w, Window dest_w, int src_x, int src_y, int *dest_x_ret, int *dest_y_ret, Window *child_ret); extern Font XLoadFont (Display *, const char *); extern XFontStruct * XQueryFont (Display *, Font); extern XFontStruct * XLoadQueryFont (Display *, const char *); extern int XFreeFontInfo (char **names, XFontStruct *info, int n); extern int XFreeFont (Display *, XFontStruct *); extern int XUnloadFont (Display *, Font); extern int XTextExtents (XFontStruct *, const char *, int length, int *dir_ret, int *ascent_ret, int *descent_ret, XCharStruct *overall_ret); extern char * jwxyz_unicode_character_name (Display *, Font, unsigned long uc); extern int XTextExtents16 (XFontStruct *, const XChar2b *, int length, int *dir_ret, int *ascent_ret, int *descent_ret, XCharStruct *overall_ret); extern int XTextWidth (XFontStruct *, const char *, int length); extern int XSetFont (Display *, GC, Font); extern XFontSet XCreateFontSet (Display *, char *name, char ***missing_charset_list_return, int *missing_charset_count_return, char **def_string_return); extern void XFreeFontSet (Display *, XFontSet); extern void XFreeStringList (char **); extern int Xutf8TextExtents (XFontSet, const char *, int num_bytes, XRectangle *overall_ink_return, XRectangle *overall_logical_return); extern void Xutf8DrawString (Display *, Drawable, XFontSet, GC, int x, int y, const char *, int num_bytes); extern Pixmap XCreatePixmap (Display *, Drawable, unsigned int width, unsigned int height, unsigned int depth); extern int XFreePixmap (Display *, Pixmap); extern char *XGetAtomName (Display *, Atom); extern void set_points_list(XPoint *points, int npoints, linked_point *root); extern void traverse_points_list(Display *dpy, linked_point * root); extern void draw_three_vertices(Display *dpy, linked_point * a, Bool triangle); extern double compute_edge_length(linked_point * a, linked_point * b); extern double get_angle(double a, double b, double c); extern Bool is_same_slope(linked_point * a); extern Bool is_an_ear(linked_point * a); extern Bool is_three_point_loop(linked_point * head); extern int draw_arc_gl(Display *dpy, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2, Bool fill_p); // Log()/Logv(), for debugging JWXYZ. Screenhacks should still use // fprintf(stderr, ...). extern void Log(const char *format, ...) #if defined __GNUC__ || defined __clang__ __attribute__((format(printf, 1, 2))) #endif ; extern void jwxyz_logv(Bool error, const char *fmt, va_list args); #define Logv(format, args) (jwxyz_logv(False, format, args)) // Xt timers and fds extern XtAppContext XtDisplayToApplicationContext (Display *); typedef void (*XtTimerCallbackProc) (XtPointer closure, XtIntervalId *); typedef void (*XtInputCallbackProc) (XtPointer closure, int *fd, XtInputId *); extern XtIntervalId XtAppAddTimeOut (XtAppContext, unsigned long usecs, XtTimerCallbackProc, XtPointer closure); extern void XtRemoveTimeOut (XtIntervalId); extern XtInputId XtAppAddInput (XtAppContext, int fd, XtPointer flags, XtInputCallbackProc, XtPointer closure); extern void XtRemoveInput (XtInputId); extern XtInputMask XtAppPending (XtAppContext); extern void XtAppProcessEvent (XtAppContext, XtInputMask); // Some GLX stuff that also doesn't technically belong here... // from XScreenSaverGLView.m extern void glXSwapBuffers (Display *, Window); extern void glXMakeCurrent (Display *, Window, GLXContext); // also declared in utils/visual.h extern int has_writable_cells (Screen *, Visual *); extern int visual_depth (Screen *, Visual *); extern int visual_pixmap_depth (Screen *, Visual *); extern int visual_cells (Screen *, Visual *); extern int visual_class (Screen *, Visual *); extern void visual_rgb_masks (Screen *screen, Visual *visual, unsigned long *red_mask, unsigned long *green_mask, unsigned long *blue_mask); extern int screen_number (Screen *); // also declared in utils/grabclient.h extern Bool use_subwindow_mode_p (Screen *, Window); // also declared in xlockmoreI.h extern void clear_gl_error (void); extern void check_gl_error (const char *type); // A Visual is supposed to be an opaque type, even though Xlib.h defines it. // Only utils/xft.c uses this, out of necessity. struct jwxyz_Visual { int class; /* class of screen (monochrome, etc.) */ unsigned long red_mask, green_mask, blue_mask; /* same as Xlib.h */ unsigned long alpha_mask; /* new */ }; struct jwxyz_XGCValues { int function; /* logical operation */ #if 0 unsigned long plane_mask;/* plane mask */ #endif unsigned long foreground;/* foreground pixel */ unsigned long background;/* background pixel */ int line_width; /* line width */ #if 0 int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */ #endif int cap_style; /* CapNotLast, CapButt, CapRound, CapProjecting */ int join_style; /* JoinMiter, JoinRound, JoinBevel */ #if 0 int fill_style; /* FillSolid, FillTiled, FillStippled, FillOpaeueStippled */ #endif int fill_rule; /* EvenOddRule, WindingRule */ #if 0 int arc_mode; /* ArcChord, ArcPieSlice */ Pixmap tile; /* tile pixmap for tiling operations */ Pixmap stipple; /* stipple 1 plane pixmap for stipping */ int ts_x_origin; /* offset for tile or stipple operations */ int ts_y_origin; #endif Font font; /* default text font for text operations */ int subwindow_mode; /* ClipByChildren, IncludeInferiors */ #if 0 Bool graphics_exposures;/* boolean, should exposures be generated */ #endif int clip_x_origin; /* origin for clipping */ int clip_y_origin; Pixmap clip_mask; /* bitmap clipping; other calls for rects */ #if 0 int dash_offset; /* patterned/dashed line information */ char dashes; #endif Bool alpha_allowed_p; /* jwxyz extension: whether pixel values may have a non-opaque alpha component. */ Bool antialias_p; /* jwxyz extension: whether Quartz should draw with antialiasing. */ }; struct jwxyz_XWindowAttributes { int x, y; /* location of window */ int width, height; /* width and height of window */ int border_width; /* border width of window */ int depth; /* depth of window */ Visual *visual; /* the associated visual structure */ #if 0 Window root; /* root of screen containing window */ int class; /* InputOutput, InputOnly*/ int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes;/* planes to be preserved if possible */ unsigned long backing_pixel;/* value to be used when restoring planes */ Bool save_under; /* boolean, should bits under be saved? */ #endif Colormap colormap; /* color map to be associated with window */ #if 0 Bool map_installed; /* boolean, is color map currently installed*/ int map_state; /* IsUnmapped, IsUnviewable, IsViewable */ long all_event_masks; /* set of events all people have interest in*/ long your_event_mask; /* my event mask */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ #endif Screen *screen; /* back pointer to correct screen */ }; struct jwxyz_XColor { unsigned long pixel; unsigned short red, green, blue; char flags; /* do_red, do_green, do_blue */ char pad; }; struct jwxyz_XPoint { short x, y; }; struct jwxyz_XSegment { short x1, y1, x2, y2; }; struct jwxyz_XRectangle { short x, y; unsigned short width, height; }; struct jwxyz_XArc { short x, y; unsigned short width, height; short angle1, angle2; }; struct jwxyz_XrmOptionDescRec { char *option; char *specifier; int argKind; void *value; }; struct jwxyz_XAnyEvent { int type; #if 0 unsigned long serial; Bool send_event; Display *display; Window window; #endif }; struct jwxyz_XKeyEvent { int type; #if 0 unsigned long serial; Bool send_event; Display *display; Window window; Window root; Window subwindow; Time time; int x, y; int x_root, y_root; #endif unsigned int state; unsigned int keycode; #if 0 Bool same_screen; #endif }; struct jwxyz_XButtonEvent { int type; #if 0 unsigned long serial; Bool send_event; Display *display; Window window; Window root; Window subwindow; Time time; #endif int x, y; #if 0 int x_root, y_root; #endif unsigned int state; unsigned int button; #if 0 Bool same_screen; #endif }; struct jwxyz_XMotionEvent { int type; #if 0 unsigned long serial; Bool send_event; Display *display; Window window; Window root; Window subwindow; Time time; #endif int x, y; #if 0 int x_root, y_root; #endif unsigned int state; #if 0 char is_hint; Bool same_screen; #endif }; union jwxyz_XEvent { int type; XAnyEvent xany; XKeyEvent xkey; XButtonEvent xbutton; XMotionEvent xmotion; }; struct jwxyz_XImage { int width, height; /* size of image */ int xoffset; /* number of pixels offset in X direction */ int format; /* XYBitmap, XYPixmap, ZPixmap */ char *data; /* pointer to image data */ int byte_order; /* data byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* quant. of scanline 8, 16, 32 */ int bitmap_bit_order; /* LSBFirst, MSBFirst */ int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ int depth; /* depth of image */ int bytes_per_line; /* accelarator to next line */ int bits_per_pixel; /* bits per pixel (ZPixmap) */ unsigned long red_mask; /* bits in z arrangment */ unsigned long green_mask; unsigned long blue_mask; // XPointer obdata; /* hook for the object routines to hang on */ struct funcs { /* image manipulation routines */ #if 0 XImage *(*create_image)( Display* /* display */, Visual* /* visual */, unsigned int /* depth */, int /* format */, int /* offset */, char* /* data */, unsigned int /* width */, unsigned int /* height */, int /* bitmap_pad */, int /* bytes_per_line */); int (*destroy_image) (XImage *); #endif unsigned long (*get_pixel) (XImage *, int, int); int (*put_pixel) (XImage *, int, int, unsigned long); #if 0 XImage *(*sub_image) (XImage *, int, int, unsigned int, unsigned int); int (*add_pixel) (XImage *, long); #endif } f; }; struct jwxyz_XCharStruct { short lbearing; /* origin to left edge of ink */ short rbearing; /* origin to right edge of ink */ short width; /* advance to next char's origin */ short ascent; /* baseline to top edge of ink */ short descent; /* baseline to bottom edge of ink */ #if 0 unsigned short attributes; /* per char flags (not predefined) */ #endif }; struct jwxyz_XFontProp { Atom name; unsigned long card32; /* Careful: This holds (32- or 64-bit) pointers. */ }; struct jwxyz_XFontStruct { #if 0 XExtData *ext_data; /* hook for extension to hang data */ #endif Font fid; /* Font id for this font */ #if 0 unsigned direction; /* hint about direction the font is painted */ #endif unsigned min_char_or_byte2; /* first character */ unsigned max_char_or_byte2; /* last character */ #if 0 unsigned min_byte1; /* first row that exists */ unsigned max_byte1; /* last row that exists */ Bool all_chars_exist; /* flag if all characters have non-zero size*/ #endif unsigned default_char; /* char to print for undefined character */ int n_properties; /* how many properties there are */ XFontProp *properties; /* pointer to array of additional properties*/ XCharStruct min_bounds; /* minimum bounds over all existing char*/ XCharStruct max_bounds; /* maximum bounds over all existing char*/ XCharStruct *per_char; /* first_char to last_char information */ int ascent; /* log. extent above baseline for spacing */ int descent; /* log. descent below baseline for spacing */ }; struct jwxyz_XComposeStatus { char dummy; }; struct jwxyz_XPixmapFormatValues { int depth; int bits_per_pixel; int scanline_pad; }; struct jwxyz_XChar2b { unsigned char byte1; unsigned char byte2; }; struct jwxyz_vtbl { Window (*root) (Display *); Visual *(*visual) (Display *); struct jwxyz_sources_data *(*display_sources_data) (Display *); unsigned long *(*window_background) (Display *); int (*draw_arc) (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2, Bool fill_p); void (*fill_rects) (Display *dpy, Drawable d, GC gc, const XRectangle *rectangles, unsigned long nrects, unsigned long pixel); XGCValues *(*gc_gcv) (GC gc); unsigned int (*gc_depth) (GC gc); int (*draw_string) (Display *dpy, Drawable d, GC gc, int x, int y, const char *str, size_t len, Bool utf8); void (*copy_area) (Display *dpy, Drawable src, Drawable dst, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y); int (*DrawPoints) (Display *, Drawable, GC, XPoint *, int n, int mode); int (*DrawSegments) (Display *, Drawable, GC, XSegment *, int n); GC (*CreateGC) (Display *, Drawable, unsigned long mask, XGCValues *); int (*FreeGC) (Display *, GC); int (*ClearWindow) (Display *, Window); int (*SetClipMask) (Display *, GC, Pixmap); int (*SetClipOrigin) (Display *, GC, int x, int y); int (*FillPolygon) (Display *, Drawable, GC, XPoint * points, int npoints, int shape, int mode); int (*DrawLines) (Display *, Drawable, GC, XPoint *, int n, int mode); int (*PutImage) (Display *, Drawable, GC, XImage *, int src_x, int src_y, int dest_x, int dest_y, unsigned int w, unsigned int h); XImage *(*GetSubImage) (Display *dpy, Drawable d, int x, int y, unsigned int width, unsigned int height, unsigned long plane_mask, int format, XImage *dest_image, int dest_x, int dest_y); }; #define JWXYZ_VTBL(dpy) (*(struct jwxyz_vtbl **)(dpy)) #define XRootWindow(dpy, screen) \ ((dpy) ? JWXYZ_VTBL(dpy)->root(dpy) : 0) #define XDefaultVisualOfScreen(screen) \ ((screen) ? JWXYZ_VTBL(screen)->visual(screen) : 0) #define XDrawPoints(dpy, d, gc, points, n, mode) \ (JWXYZ_VTBL(dpy)->DrawPoints (dpy, d, gc, points, n, mode)) #define XDrawSegments(dpy, d, gc, segments, n) \ (JWXYZ_VTBL(dpy)->DrawSegments (dpy, d, gc, segments, n)) #define XCreateGC(dpy, d, mask, gcv) \ (JWXYZ_VTBL(dpy)->CreateGC (dpy, d, mask, gcv)) #define XFreeGC(dpy, gc) \ (JWXYZ_VTBL(dpy)->FreeGC (dpy, gc)) #define XClearWindow(dpy, win) \ (JWXYZ_VTBL(dpy)->ClearWindow(dpy, win)) #define XSetClipMask(dpy, gc, m) \ (JWXYZ_VTBL(dpy)->SetClipMask (dpy, gc, m)) #define XSetClipOrigin(dpy, gc, x, y) \ (JWXYZ_VTBL(dpy)->SetClipOrigin (dpy, gc, x, y)) #define XFillPolygon(dpy, d, gc, points, npoints, shape, mode) \ (JWXYZ_VTBL(dpy)->FillPolygon (dpy, d, gc, points, npoints, shape, mode)) #define XDrawLines(dpy, d, gc, points, n, mode) \ (JWXYZ_VTBL(dpy)->DrawLines (dpy, d, gc, points, n, mode)) #define XPutImage(dpy, d, gc, image, src_x, src_y, dest_x, dest_y, w, h) \ (JWXYZ_VTBL(dpy)->PutImage (dpy, d, gc, image, src_x, src_y, \ dest_x, dest_y, w, h)) #define XGetSubImage(dpy, d, x, y, width, height, plane_mask, \ format, dest_image, dest_x, dest_y) \ (JWXYZ_VTBL(dpy)->GetSubImage (dpy, d, x, y, width, height, plane_mask, \ format, dest_image, dest_x, dest_y)) #endif /* __JWXYZ_H__ */