-/* xscreensaver, Copyright (c) 1991-2016 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1991-2017 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
#define __JWXYZ_H__
#include <stdlib.h> /* For abort(). */
+#include <stdarg.h>
#if defined __FreeBSD__ || defined __MACH__ && defined __APPLE__
# include <sys/cdefs.h>
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;
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 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 *);
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);
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);
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);
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,
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 *);
// 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
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 {