1
/* xscreensaver, Copyright (c) 1991-2008 Jamie Zawinski <jwz@jwz.org>
3
* Permission to use, copy, modify, distribute, and sell this software and its
4
* documentation for any purpose is hereby granted without fee, provided that
5
* the above copyright notice appear in all copies and that both that
6
* copyright notice and this permission notice appear in supporting
7
* documentation. No representations are made about the suitability of this
8
* software for any purpose. It is provided "as is" without express or
14
But it's a bunch of function definitions that bear some resemblance to
15
Xlib and that do Cocoa-ish things that bear some resemblance to the
16
things that Xlib might have done.
24
typedef void * XPointer;
25
typedef unsigned long Time;
26
typedef unsigned int KeySym;
27
typedef unsigned int KeyCode;
28
typedef unsigned int VisualID;
30
typedef struct jwxyz_Display Display;
31
typedef struct jwxyz_Screen Screen;
32
typedef struct jwxyz_Visual Visual;
33
typedef struct jwxyz_Drawable * Drawable;
34
typedef struct jwxyz_Colormap * Colormap;
35
typedef struct jwxyz_GC * GC;
36
typedef struct jwxyz_XColor XColor;
37
typedef struct jwxyz_XGCValues XGCValues;
38
typedef struct jwxyz_XPoint XPoint;
39
typedef struct jwxyz_XSegment XSegment;
40
typedef struct jwxyz_XRectangle XRectangle;
41
typedef struct jwxyz_XArc XArc;
42
typedef struct jwxyz_XWindowAttributes XWindowAttributes;
43
typedef struct jwxyz_XrmOptionDescRec XrmOptionDescRec;
44
typedef struct jwxyz_XrmDatabase * XrmDatabase;
45
typedef struct jwxyz_XImage XImage;
46
typedef struct jwxyz_XFontStruct XFontStruct;
47
typedef struct jwxyz_Font * Font;
48
typedef struct jwxyz_XCharStruct XCharStruct;
49
typedef struct jwxyz_XComposeStatus XComposeStatus;
50
typedef struct jwxyz_XPixmapFormatValues XPixmapFormatValues;
52
typedef union jwxyz_XEvent XEvent;
53
typedef struct jwxyz_XAnyEvent XAnyEvent;
54
typedef struct jwxyz_XKeyEvent XKeyEvent;
55
typedef struct jwxyz_XMotionEvent XMotionEvent;
56
typedef struct jwxyz_XButtonEvent XButtonEvent;
57
typedef XKeyEvent XKeyPressedEvent;
58
typedef XKeyEvent XKeyReleasedEvent;
59
typedef XMotionEvent XPointerMovedEvent;
60
typedef XButtonEvent XButtonPressedEvent;
61
typedef XButtonEvent XButtonReleasedEvent;
64
/* Not technically Xlib... */
65
typedef struct jwxyz_GLXContext * GLXContext;
66
typedef struct jwxyz_XtAppContext * XtAppContext;
67
typedef struct jwxyz_XtIntervalId * XtIntervalId;
68
typedef struct jwxyz_XtInputId * XtInputId;
69
typedef void * XtPointer;
70
#define XtInputReadMask (1L<<0)
71
#define XtInputWriteMask (1L<<1)
72
#define XtInputExceptMask (1L<<2)
80
#define Window Drawable
81
#define Pixmap Drawable
83
#define XrmoptionNoArg 0
84
#define XrmoptionSepArg 1
86
#define CoordModeOrigin 0
87
#define CoordModePrevious 1
90
#define LineOnOffDash 1
91
#define LineDoubleDash 2
96
#define CapProjecting 3
104
#define FillStippled 2
105
#define FillOpaqueStippled 3
107
#define EvenOddRule 0
108
#define WindingRule 1
123
#define StaticColor 2
124
#define PseudoColor 3
126
#define DirectColor 5
132
#define DoGreen (1<<1)
133
#define DoBlue (1<<2)
135
#define GCFunction (1L<<0)
136
#define GCPlaneMask (1L<<1)
137
#define GCForeground (1L<<2)
138
#define GCBackground (1L<<3)
139
#define GCLineWidth (1L<<4)
140
#define GCLineStyle (1L<<5)
141
#define GCCapStyle (1L<<6)
142
#define GCJoinStyle (1L<<7)
143
#define GCFillStyle (1L<<8)
144
#define GCFillRule (1L<<9)
145
#define GCTile (1L<<10)
146
#define GCStipple (1L<<11)
147
#define GCTileStipXOrigin (1L<<12)
148
#define GCTileStipYOrigin (1L<<13)
149
#define GCFont (1L<<14)
150
#define GCSubwindowMode (1L<<15)
151
#define GCGraphicsExposures (1L<<16)
152
#define GCClipXOrigin (1L<<17)
153
#define GCClipYOrigin (1L<<18)
154
#define GCClipMask (1L<<19)
155
#define GCDashOffset (1L<<20)
156
#define GCDashList (1L<<21)
157
#define GCArcMode (1L<<22)
161
#define ButtonPress 4
162
#define ButtonRelease 5
163
#define MotionNotify 6
165
#define GraphicsExpose 13
167
#define VisibilityNotify 15
169
#define ClipByChildren 0
170
#define IncludeInferiors 1
172
#define KeyPressMask (1L<<0)
173
#define KeyReleaseMask (1L<<1)
174
#define ButtonPressMask (1L<<2)
175
#define ButtonReleaseMask (1L<<3)
176
#define PointerMotionMask (1L<<6)
184
#define ShiftMask (1<<0)
185
#define LockMask (1<<1)
186
#define ControlMask (1<<2)
187
#define Mod1Mask (1<<3)
188
#define Mod2Mask (1<<4)
189
#define Mod3Mask (1<<5)
190
#define Mod4Mask (1<<6)
191
#define Mod5Mask (1<<7)
192
#define Button1Mask (1<<8)
193
#define Button2Mask (1<<9)
194
#define Button3Mask (1<<10)
195
#define Button4Mask (1<<11)
196
#define Button5Mask (1<<12)
198
#define GXclear 0x0 /* 0 */
199
#define GXand 0x1 /* src AND dst */
200
// #define GXandReverse 0x2 /* src AND NOT dst */
201
#define GXcopy 0x3 /* src */
202
// #define GXandInverted 0x4 /* NOT src AND dst */
203
// #define GXnoop 0x5 /* dst */
204
#define GXxor 0x6 /* src XOR dst */
205
#define GXor 0x7 /* src OR dst */
206
// #define GXnor 0x8 /* NOT src AND NOT dst */
207
// #define GXequiv 0x9 /* NOT src XOR dst */
208
// #define GXinvert 0xa /* NOT dst */
209
// #define GXorReverse 0xb /* src OR NOT dst */
210
// #define GXcopyInverted 0xc /* NOT src */
211
// #define GXorInverted 0xd /* NOT src OR dst */
212
// #define GXnand 0xe /* NOT src OR NOT dst */
213
#define GXset 0xf /* 1 */
215
#define DefaultScreen(dpy) (0)
216
#define BlackPixelOfScreen(s) (0xFF000000)
217
#define WhitePixelOfScreen(s) (0xFFFFFFFF)
218
#define BlackPixel(dpy,n) BlackPixelOfScreen(0)
219
#define WhitePixel(dpy,n) WhitePixelOfScreen(0)
220
#define CellsOfScreen(s) (0x00FFFFFF)
221
#define XFree(x) free(x)
222
#define BitmapPad(dpy) (8)
223
#define BitmapBitOrder(dpy) (MSBFirst)
224
#define ImageByteOrder(dpy) (MSBFirst)
225
#define DisplayOfScreen XDisplayOfScreen
226
#define DefaultScreenOfDisplay XDefaultScreenOfDisplay
227
#define ScreenOfDisplay(dpy,n) DefaultScreenOfDisplay(dpy)
228
#define DefaultVisualOfScreen XDefaultVisualOfScreen
229
#define DefaultColormapOfScreen(s) (0)
230
#define RootWindow XRootWindow
231
#define RootWindowOfScreen(s) RootWindow(DisplayOfScreen(s),0)
232
#define DisplayWidth XDisplayWidth
233
#define DisplayHeight XDisplayHeight
234
#define XMaxRequestSize(dpy) (65535)
236
extern Display *jwxyz_make_display (void *nsview);
237
extern void jwxyz_free_display (Display *);
238
extern void *jwxyz_window_view (Window);
239
extern void jwxyz_window_resized (Display *, Window w);
241
extern Window XRootWindow (Display *, int screen);
242
extern Screen *XDefaultScreenOfDisplay (Display *);
243
extern Visual *XDefaultVisualOfScreen (Screen *);
244
extern Display *XDisplayOfScreen (Screen *);
245
extern int XDisplayNumberOfScreen (Screen *);
246
extern int XScreenNumberOfScreen (Screen *);
247
extern int XDisplayWidth (Display *, int);
248
extern int XDisplayHeight (Display *, int);
250
extern int XDrawPoint (Display *, Drawable, GC, int x, int y);
251
extern int XDrawPoints (Display *, Drawable, GC, XPoint *, int n, int mode);
252
extern int XDrawSegments (Display *, Drawable, GC, XSegment *, int n);
254
extern GC XCreateGC (Display *, Drawable, unsigned long mask, XGCValues *);
255
extern int XChangeGC (Display *, GC, unsigned long mask, XGCValues *);
256
extern int XFreeGC (Display *, GC);
258
extern int XClearWindow (Display *, Window);
259
extern int XClearArea (Display *, Window, int x, int y, int w, int h,Bool exp);
260
extern int XSetWindowBackground (Display *, Window, unsigned long);
261
extern Status XGetWindowAttributes (Display *, Window, XWindowAttributes *);
262
extern Status XGetGeometry (Display *, Drawable, Window *root_ret,
263
int *x_ret, int *y_ret,
264
unsigned int *w_ret, unsigned int *h_ret,
265
unsigned int *bw_ret, unsigned int *depth_ret);
266
extern Status XAllocColor (Display *, Colormap, XColor *);
267
extern Status XAllocColorCells (Display *, Colormap, Bool contig,
268
unsigned long *pmret, unsigned int npl,
269
unsigned long *pxret, unsigned int npx);
270
extern int XStoreColors (Display *, Colormap, XColor *, int n);
271
extern int XStoreColor (Display *, Colormap, XColor *);
272
extern Status XParseColor(Display *, Colormap, const char *spec, XColor *ret);
273
extern Status XAllocNamedColor (Display *, Colormap, char *name,
274
XColor *screen_ret, XColor *exact_ret);
275
extern int XQueryColor (Display *, Colormap, XColor *);
276
extern int XQueryColors(Display *, Colormap colormap, XColor *, int ncolors);
278
extern int XSetForeground (Display *, GC, unsigned long);
279
extern int XSetBackground (Display *, GC, unsigned long);
280
extern int XSetFunction (Display *, GC, int);
281
extern int XSetSubwindowMode (Display *, GC, int);
282
extern int XSetLineAttributes (Display *, GC, unsigned int line_width,
283
int line_style, int cap_style, int join_style);
284
extern int XSetClipMask (Display *, GC, Pixmap);
285
extern int XSetClipOrigin (Display *, GC, int x, int y);
286
extern int jwxyz_XSetAlphaAllowed (Display *, GC, Bool);
287
extern int jwxyz_XSetAntiAliasing (Display *, GC, Bool);
289
extern int XFlush (Display *);
290
extern int XSync (Display *, Bool);
291
extern int XFreeColors (Display *, Colormap, unsigned long *px, int n,
292
unsigned long planes);
293
extern int XFillPolygon (Display *, Drawable, GC,
294
XPoint * points, int npoints, int shape, int mode);
295
extern int XCopyArea (Display *, Drawable src, Drawable dest, GC,
296
int src_x, int src_y,
297
unsigned int width, unsigned int height,
298
int dest_x, int dest_y);
299
extern int XCopyPlane (Display *, Drawable, Drawable, GC,
300
int src_x, int src_y,
301
unsigned width, int height,
302
int dest_x, int dest_y,
303
unsigned long plane);
305
extern int XDrawLine (Display *, Drawable, GC, int x1, int y1, int x2, int y2);
306
extern int XDrawLines (Display *, Drawable, GC, XPoint *, int n, int mode);
307
extern int XDrawArc (Display *, Drawable, GC, int x, int y,
308
unsigned int width, unsigned int height,
309
int angle1, int angle2);
310
extern int XFillArc (Display *, Drawable, GC, int x, int y,
311
unsigned int width, unsigned int height,
312
int angle1, int angle2);
313
extern int XDrawArcs (Display *, Drawable, GC, XArc *arcs, int narcs);
314
extern int XFillArcs (Display *, Drawable, GC, XArc *arcs, int narcs);
315
extern int XDrawRectangle (Display *, Drawable, GC, int x, int y,
316
unsigned int width, unsigned int height);
317
extern int XFillRectangle (Display *, Drawable, GC, int x, int y,
318
unsigned int width, unsigned int height);
319
extern int XFillRectangles (Display *, Drawable, GC, XRectangle *, int n);
321
extern int XDrawString (Display *, Drawable, GC, int x, int y, const char *,
323
extern int XDrawImageString (Display *, Drawable, GC, int x, int y,
324
const char *, int len);
326
extern Bool XQueryPointer (Display *, Window, Window *root_ret,
328
int *root_x_ret, int *root_y_ret,
329
int *win_x_ret, int *win_y_ret,
330
unsigned int *mask_ret);
331
extern int XLookupString (XKeyEvent *, char *ret, int size, KeySym *ks_ret,
333
extern KeySym XKeycodeToKeysym (Display *, KeyCode, int index);
335
extern Status XInitImage (XImage *);
336
extern XImage *XCreateImage (Display *, Visual *, unsigned int depth,
337
int format, int offset, char *data,
338
unsigned int width, unsigned int height,
339
int bitmap_pad, int bytes_per_line);
340
extern XImage *XSubImage (XImage *, int x, int y,
341
unsigned int w, unsigned int h);
343
extern unsigned long XGetPixel (XImage *, int x, int y);
344
extern int XPutPixel (XImage *, int x, int y, unsigned long);
345
extern int XDestroyImage (XImage *);
346
extern int XPutImage (Display *, Drawable, GC, XImage *,
347
int src_x, int src_y, int dest_x, int dest_y,
348
unsigned int w, unsigned int h);
349
extern XImage *XGetImage (Display *, Drawable, int x, int y,
350
unsigned int w, unsigned int h,
351
unsigned long pm, int fmt);
352
extern Pixmap XCreatePixmapFromBitmapData (Display *, Drawable,
354
unsigned int w, unsigned int h,
358
extern XPixmapFormatValues *XListPixmapFormats (Display *, int *count_ret);
360
extern void jwxyz_draw_NSImage (Display *, Drawable, void *NSImage_arg,
361
XRectangle *geom_ret);
363
extern int XSetGraphicsExposures (Display *, GC, Bool);
364
extern Bool XTranslateCoordinates (Display *, Window src_w, Window dest_w,
365
int src_x, int src_y,
366
int *dest_x_ret, int *dest_y_ret,
369
extern Font XLoadFont (Display *, const char *);
370
extern XFontStruct * XQueryFont (Display *, Font);
371
extern XFontStruct * XLoadQueryFont (Display *, const char *);
372
extern int XFreeFontInfo (char **names, XFontStruct *info, int n);
373
extern int XFreeFont (Display *, XFontStruct *);
374
extern int XUnloadFont (Display *, Font);
375
extern int XTextExtents (XFontStruct *, const char *, int length,
376
int *dir_ret, int *ascent_ret, int *descent_ret,
377
XCharStruct *overall_ret);
378
extern int XTextWidth (XFontStruct *, const char *, int length);
379
extern int XSetFont (Display *, GC, Font);
381
extern Pixmap XCreatePixmap (Display *, Drawable,
382
unsigned int width, unsigned int height,
384
extern int XFreePixmap (Display *, Pixmap);
387
extern XtAppContext XtDisplayToApplicationContext (Display *);
388
typedef void (*XtTimerCallbackProc) (XtPointer closure, XtIntervalId *);
389
typedef void (*XtInputCallbackProc) (XtPointer closure, int *fd, XtInputId *);
390
extern XtIntervalId XtAppAddTimeOut (XtAppContext, unsigned long usecs,
391
XtTimerCallbackProc, XtPointer closure);
392
extern void XtRemoveTimeOut (XtIntervalId);
393
extern XtInputId XtAppAddInput (XtAppContext, int fd, XtPointer flags,
394
XtInputCallbackProc, XtPointer closure);
395
extern void XtRemoveInput (XtInputId);
396
extern struct jwxyz_sources_data *display_sources_data (Display *);
398
// Some GLX stuff that also doesn't technically belong here...
399
// from XScreenSaverGLView.m
400
extern void glXSwapBuffers (Display *, Window);
401
extern void glXMakeCurrent (Display *, Window, GLXContext);
403
// also declared in utils/visual.h
404
extern int has_writable_cells (Screen *, Visual *);
405
extern int visual_depth (Screen *, Visual *);
406
extern int visual_cells (Screen *, Visual *);
407
extern int visual_class (Screen *, Visual *);
409
// also declared in utils/grabclient.h
410
extern Bool use_subwindow_mode_p (Screen *, Window);
413
extern int jwxyz_font_info (Font, int *size_ret, int *face_ret);
416
struct jwxyz_Visual {
417
VisualID visualid; /* visual id of this visual */
418
int class; /* class of screen (monochrome, etc.) */
419
unsigned long red_mask, green_mask, blue_mask; /* mask values */
420
int bits_per_rgb; /* log base 2 of distinct color values */
421
// int map_entries; /* color map entries */
424
struct jwxyz_XGCValues {
425
int function; /* logical operation */
427
unsigned long plane_mask;/* plane mask */
429
unsigned long foreground;/* foreground pixel */
430
unsigned long background;/* background pixel */
431
int line_width; /* line width */
433
int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */
435
int cap_style; /* CapNotLast, CapButt, CapRound, CapProjecting */
436
int join_style; /* JoinMiter, JoinRound, JoinBevel */
438
int fill_style; /* FillSolid, FillTiled,
439
FillStippled, FillOpaeueStippled */
441
int fill_rule; /* EvenOddRule, WindingRule */
443
int arc_mode; /* ArcChord, ArcPieSlice */
444
Pixmap tile; /* tile pixmap for tiling operations */
445
Pixmap stipple; /* stipple 1 plane pixmap for stipping */
446
int ts_x_origin; /* offset for tile or stipple operations */
449
Font font; /* default text font for text operations */
450
int subwindow_mode; /* ClipByChildren, IncludeInferiors */
452
Bool graphics_exposures;/* boolean, should exposures be generated */
454
int clip_x_origin; /* origin for clipping */
456
Pixmap clip_mask; /* bitmap clipping; other calls for rects */
458
int dash_offset; /* patterned/dashed line information */
462
Bool alpha_allowed_p; /* jwxyz extension: whether pixel values may have
463
a non-opaque alpha component. */
464
Bool antialias_p; /* jwxyz extension: whether Quartz should draw
465
with antialiasing. */
468
struct jwxyz_XWindowAttributes {
469
int x, y; /* location of window */
470
int width, height; /* width and height of window */
471
int border_width; /* border width of window */
472
int depth; /* depth of window */
473
Visual *visual; /* the associated visual structure */
475
Window root; /* root of screen containing window */
476
int class; /* InputOutput, InputOnly*/
477
int bit_gravity; /* one of bit gravity values */
478
int win_gravity; /* one of the window gravity values */
479
int backing_store; /* NotUseful, WhenMapped, Always */
480
unsigned long backing_planes;/* planes to be preserved if possible */
481
unsigned long backing_pixel;/* value to be used when restoring planes */
482
Bool save_under; /* boolean, should bits under be saved? */
484
Colormap colormap; /* color map to be associated with window */
486
Bool map_installed; /* boolean, is color map currently installed*/
487
int map_state; /* IsUnmapped, IsUnviewable, IsViewable */
488
long all_event_masks; /* set of events all people have interest in*/
489
long your_event_mask; /* my event mask */
490
long do_not_propagate_mask; /* set of events that should not propagate */
491
Bool override_redirect; /* boolean value for override-redirect */
493
Screen *screen; /* back pointer to correct screen */
496
struct jwxyz_XColor {
498
unsigned short red, green, blue;
499
char flags; /* do_red, do_green, do_blue */
503
struct jwxyz_XPoint {
507
struct jwxyz_XSegment {
508
short x1, y1, x2, y2;
511
struct jwxyz_XRectangle {
513
unsigned short width, height;
518
unsigned short width, height;
519
short angle1, angle2;
523
struct jwxyz_XrmOptionDescRec {
530
struct jwxyz_XAnyEvent {
533
unsigned long serial;
540
struct jwxyz_XKeyEvent {
543
unsigned long serial;
554
unsigned int keycode;
560
struct jwxyz_XButtonEvent {
563
unsigned long serial;
582
struct jwxyz_XMotionEvent {
585
unsigned long serial;
608
XButtonEvent xbutton;
609
XMotionEvent xmotion;
612
struct jwxyz_XImage {
613
int width, height; /* size of image */
614
int xoffset; /* number of pixels offset in X direction */
615
int format; /* XYBitmap, XYPixmap, ZPixmap */
616
char *data; /* pointer to image data */
617
int byte_order; /* data byte order, LSBFirst, MSBFirst */
618
int bitmap_unit; /* quant. of scanline 8, 16, 32 */
619
int bitmap_bit_order; /* LSBFirst, MSBFirst */
620
int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */
621
int depth; /* depth of image */
622
int bytes_per_line; /* accelarator to next line */
623
int bits_per_pixel; /* bits per pixel (ZPixmap) */
624
unsigned long red_mask; /* bits in z arrangment */
625
unsigned long green_mask;
626
unsigned long blue_mask;
627
// XPointer obdata; /* hook for the object routines to hang on */
628
struct funcs { /* image manipulation routines */
630
XImage *(*create_image)(
631
Display* /* display */,
632
Visual* /* visual */,
633
unsigned int /* depth */,
637
unsigned int /* width */,
638
unsigned int /* height */,
639
int /* bitmap_pad */,
640
int /* bytes_per_line */);
641
int (*destroy_image) (XImage *);
643
unsigned long (*get_pixel) (XImage *, int, int);
644
int (*put_pixel) (XImage *, int, int, unsigned long);
646
XImage *(*sub_image) (XImage *, int, int, unsigned int, unsigned int);
647
int (*add_pixel) (XImage *, long);
652
struct jwxyz_XCharStruct {
653
short lbearing; /* origin to left edge of raster */
654
short rbearing; /* origin to right edge of raster */
655
short width; /* advance to next char's origin */
656
short ascent; /* baseline to top edge of raster */
657
short descent; /* baseline to bottom edge of raster */
659
unsigned short attributes; /* per char flags (not predefined) */
663
struct jwxyz_XFontStruct {
665
XExtData *ext_data; /* hook for extension to hang data */
667
Font fid; /* Font id for this font */
669
unsigned direction; /* hint about direction the font is painted */
671
unsigned min_char_or_byte2; /* first character */
672
unsigned max_char_or_byte2; /* last character */
674
unsigned min_byte1; /* first row that exists */
675
unsigned max_byte1; /* last row that exists */
676
Bool all_chars_exist; /* flag if all characters have non-zero size*/
678
unsigned default_char; /* char to print for undefined character */
680
int n_properties; /* how many properties there are */
681
XFontProp *properties; /* pointer to array of additional properties*/
683
XCharStruct min_bounds; /* minimum bounds over all existing char*/
684
XCharStruct max_bounds; /* maximum bounds over all existing char*/
685
XCharStruct *per_char; /* first_char to last_char information */
686
int ascent; /* log. extent above baseline for spacing */
687
int descent; /* log. descent below baseline for spacing */
690
struct jwxyz_XComposeStatus {
694
struct jwxyz_XPixmapFormatValues {
700
#endif /* __JWXYZ_H__ */