-/* xscreensaver, Copyright (c) 1991-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1991-2015 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
#ifndef __JWXYZ_H__
#define __JWXYZ_H__
+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 int KeySym;
typedef unsigned int KeyCode;
typedef unsigned int VisualID;
+typedef unsigned long Atom; /* Must be as large as a char *. */
typedef struct jwxyz_Display Display;
typedef struct jwxyz_Screen Screen;
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_XtIntervalId * XtIntervalId;
typedef struct jwxyz_XtInputId * XtInputId;
typedef void * XtPointer;
+typedef unsigned long XtInputMask;
#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 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 GXnand 0xe /* NOT src OR NOT dst */
#define GXset 0xf /* 1 */
+#define XA_FONT 18
+
#define DefaultScreen(dpy) (0)
-#define BlackPixelOfScreen(s) (0xFF000000)
-#define WhitePixelOfScreen(s) (0xFFFFFFFF)
-#define BlackPixel(dpy,n) BlackPixelOfScreen(0)
-#define WhitePixel(dpy,n) WhitePixelOfScreen(0)
-#define CellsOfScreen(s) (0x00FFFFFF)
+#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 DisplayHeight XDisplayHeight
#define XMaxRequestSize(dpy) (65535)
-extern Display *jwxyz_make_display (void *nsview);
+#define ScreenCount(dpy) jwxyz_ScreenCount(dpy)
+extern int jwxyz_ScreenCount(Display *);
+
+extern Display *jwxyz_make_display (void *nsview, void *cgc);
extern void jwxyz_free_display (Display *);
extern void *jwxyz_window_view (Window);
-extern void jwxyz_window_resized (Display *, Window w);
+extern void jwxyz_window_resized (Display *, Window,
+ int, int, int, int,
+ void *cgc);
+extern void jwxyz_mouse_moved (Display *, Window, int x, int y);
+extern void jwxyz_flush_context (Display *);
extern Window XRootWindow (Display *, int screen);
extern Screen *XDefaultScreenOfDisplay (Display *);
extern int XDisplayWidth (Display *, int);
extern int XDisplayHeight (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 XDrawPoints (Display *, Drawable, GC, XPoint *, int n, int mode);
extern int XDrawSegments (Display *, Drawable, GC, XSegment *, int n);
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,
unsigned int depth);
extern XPixmapFormatValues *XListPixmapFormats (Display *, int *count_ret);
-extern void jwxyz_draw_NSImage (Display *, Drawable, void *NSImage_arg,
- XRectangle *geom_ret);
+extern void jwxyz_draw_NSImage_or_CGImage (Display *, Drawable,
+ Bool nsimg_p, void *NSImage_arg,
+ XRectangle *geom_ret,
+ int exif_rotation);
extern int XSetGraphicsExposures (Display *, GC, Bool);
extern Bool XTranslateCoordinates (Display *, Window src_w, Window dest_w,
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 (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 const char *jwxyz_nativeFontName (Font, float *size);
+
extern Pixmap XCreatePixmap (Display *, Drawable,
unsigned int width, unsigned int height,
unsigned int depth);
extern int XFreePixmap (Display *, Pixmap);
+extern char *XGetAtomName (Display *, Atom);
+
// Xt timers and fds
extern XtAppContext XtDisplayToApplicationContext (Display *);
typedef void (*XtTimerCallbackProc) (XtPointer closure, 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);
extern struct jwxyz_sources_data *display_sources_data (Display *);
// Some GLX stuff that also doesn't technically belong here...
extern int visual_depth (Screen *, Visual *);
extern int visual_cells (Screen *, Visual *);
extern int visual_class (Screen *, Visual *);
+extern int get_bits_per_pixel (Display *, int);
+extern int screen_number (Screen *);
// also declared in utils/grabclient.h
extern Bool use_subwindow_mode_p (Screen *, Window);
-// for aglUseFont
-extern int jwxyz_font_info (Font, int *size_ret, int *face_ret);
-
struct jwxyz_Visual {
VisualID visualid; /* visual id of this visual */
};
struct jwxyz_XCharStruct {
- short lbearing; /* origin to left edge of raster */
- short rbearing; /* origin to right edge of raster */
+ 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 raster */
- short descent; /* baseline to bottom edge of raster */
+ 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 */
Bool all_chars_exist; /* flag if all characters have non-zero size*/
#endif
unsigned default_char; /* char to print for undefined character */
-#if 0
int n_properties; /* how many properties there are */
XFontProp *properties; /* pointer to array of additional properties*/
-#endif
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 scanline_pad;
};
+struct jwxyz_XChar2b {
+ unsigned char byte1;
+ unsigned char byte2;
+};
+
#endif /* __JWXYZ_H__ */