X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=jwxyz%2Fjwxyz.h;h=adcd5e9d82632f0bfde8f2182a6861cca1bf8bda;hb=4361b69d3178d7fc98d0388f9a223af6c2651aba;hp=335df69100b0c788a776e6336930a61a1b089201;hpb=aa75c7476aeaa84cf3abc192b376a8b03c325213;p=xscreensaver diff --git a/jwxyz/jwxyz.h b/jwxyz/jwxyz.h index 335df691..adcd5e9d 100644 --- a/jwxyz/jwxyz.h +++ b/jwxyz/jwxyz.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1991-2016 Jamie Zawinski +/* xscreensaver, Copyright (c) 1991-2017 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 @@ -20,6 +20,7 @@ #define __JWXYZ_H__ #include /* For abort(). */ +#include #if defined __FreeBSD__ || defined __MACH__ && defined __APPLE__ # include @@ -45,7 +46,6 @@ typedef void * XPointer; typedef unsigned long Time; 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; @@ -92,6 +92,8 @@ 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) @@ -310,9 +312,6 @@ typedef unsigned long XtInputMask; #define XWidthMMOfScreen(s) (XDisplayWidthMM(DisplayOfScreen(s),0)) #define XHeightMMOfScreen(s) (XDisplayHeightMM(DisplayOfScreen(s),0)) -#define ScreenCount(dpy) jwxyz_ScreenCount(dpy) -extern int jwxyz_ScreenCount(Display *); - extern Window XRootWindow (Display *, int screen); extern Screen *XDefaultScreenOfDisplay (Display *); extern Visual *XDefaultVisualOfScreen (Screen *); @@ -429,6 +428,10 @@ extern int XDestroyImage (XImage *); extern int XPutImage (Display *, Drawable, GC, XImage *, int src_x, int src_y, int dest_x, int dest_y, unsigned int w, unsigned int h); +extern XImage *XGetSubImage (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); extern XImage *XGetImage (Display *, Drawable, int x, int y, unsigned int w, unsigned int h, unsigned long pm, int fmt); @@ -436,7 +439,7 @@ extern Pixmap XCreatePixmapFromBitmapData (Display *, Drawable, const char *data, unsigned int w, unsigned int h, unsigned long fg, - unsigned int bg, + unsigned long bg, unsigned int depth); extern XPixmapFormatValues *XListPixmapFormats (Display *, int *count_ret); @@ -460,7 +463,7 @@ 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 (Font, unsigned long uc); +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); @@ -478,7 +481,6 @@ extern int Xutf8TextExtents (XFontSet, const char *, int num_bytes, 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, @@ -487,6 +489,26 @@ 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(linked_point * root); +extern void draw_three_vertices(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); + +// 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 *); @@ -509,9 +531,13 @@ 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 int get_bits_per_pixel (Display *, int); +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 @@ -521,12 +547,11 @@ extern Bool use_subwindow_mode_p (Screen *, Window); 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 { - VisualID visualid; /* visual id of this visual */ int class; /* class of screen (monochrome, etc.) */ unsigned long red_mask, green_mask, blue_mask; /* mask values */ - int bits_per_rgb; /* log base 2 of distinct color values */ -// int map_entries; /* color map entries */ }; struct jwxyz_XGCValues {