5cb59c0ae66b86fe78b87ed8d8948aa0e71fd868
[xscreensaver] / hacks / screenhackI.h
1 /* xscreensaver, Copyright (c) 1992-2006 Jamie Zawinski <jwz@jwz.org>
2  *
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 
9  * implied warranty.
10  */
11
12 /* Found in Don Hopkins' .plan file:
13  *
14  *   The color situation is a total flying circus.  The X approach to
15  *   device independence is to treat everything like a MicroVax framebuffer
16  *   on acid.  A truely portable X application is required to act like the
17  *   persistent customer in the Monty Python ``Cheese Shop'' sketch.  Even
18  *   the simplest applications must answer many difficult questions, like:
19  *
20  *   WHAT IS YOUR DISPLAY?
21  *       display = XOpenDisplay("unix:0");
22  *   WHAT IS YOUR ROOT?
23  *       root = RootWindow(display, DefaultScreen(display));
24  *   AND WHAT IS YOUR WINDOW?
25  *       win = XCreateSimpleWindow(display, root, 0, 0, 256, 256, 1,
26  *                                 BlackPixel(display, DefaultScreen(display)),
27  *                                 WhitePixel(display, DefaultScreen(display)))
28  *   OH ALL RIGHT, YOU CAN GO ON.
29  *
30  *   WHAT IS YOUR DISPLAY?
31  *         display = XOpenDisplay("unix:0");
32  *   WHAT IS YOUR COLORMAP?
33  *         cmap = DefaultColormap(display, DefaultScreen(display));
34  *   AND WHAT IS YOUR FAVORITE COLOR?
35  *         favorite_color = 0; / * Black. * /
36  *         / * Whoops! No, I mean: * /
37  *         favorite_color = BlackPixel(display, DefaultScreen(display));
38  *         / * AAAYYYYEEEEE!! (client dumps core & falls into the chasm) * /
39  *
40  *   WHAT IS YOUR DISPLAY?
41  *         display = XOpenDisplay("unix:0");
42  *   WHAT IS YOUR VISUAL?
43  *         struct XVisualInfo vinfo;
44  *         if (XMatchVisualInfo(display, DefaultScreen(display),
45  *                              8, PseudoColor, &vinfo) != 0)
46  *            visual = vinfo.visual;
47  *   AND WHAT IS THE NET SPEED VELOCITY OF AN XConfigureWindow REQUEST?
48  *         / * Is that a SubStructureRedirectMask or a ResizeRedirectMask? * /
49  *   WHAT?! HOW AM I SUPPOSED TO KNOW THAT?
50  *   AAAAUUUGGGHHH!!!! (server dumps core & falls into the chasm)
51  */
52
53 #ifndef __SCREENHACK_I_H__
54 #define __SCREENHACK_I_H__
55
56 #ifdef HAVE_CONFIG_H
57 # include "config.h"
58 #endif /* HAVE_CONFIG_H */
59
60 #include <stdio.h>
61 #include <stdlib.h>
62 #include <math.h>
63
64 #ifdef __hpux
65  /* Which of the ten billion standards does values.h belong to?
66     What systems always have it? */
67 # include <values.h>
68 #endif
69
70 #ifdef HAVE_COCOA
71 # include "jwxyz.h"
72 #else  /* !HAVE_COCOA -- real X11 */
73 # include <X11/Xlib.h>
74 # include <X11/Xutil.h>
75 # include <X11/Xresource.h>
76 # include <X11/Xos.h>
77 #endif /* !HAVE_COCOA */
78
79 /* M_PI ought to have been defined in math.h, but... */
80 #ifndef M_PI
81 # define M_PI 3.1415926535
82 #endif
83
84 #ifndef M_PI_2
85 # define M_PI_2 1.5707963267
86 #endif
87
88 #include "yarandom.h"
89 #include "usleep.h"
90 #include "resources.h"
91 #include "hsv.h"
92 #include "colors.h"
93 #include "grabscreen.h"
94 #include "visual.h"
95
96 /* Be Posixly correct */
97 #undef  bzero
98 #define bzero  __ERROR_use_memset_not_bzero_in_xscreensaver__
99 #undef  bcopy
100 #define bcopy  __ERROR_use_memcpy_not_bcopy_in_xscreensaver__
101 #undef  ftime
102 #define ftime  __ERROR_use_gettimeofday_not_ftime_in_xscreensaver__
103 #undef  sleep
104 #define sleep  __ERROR_do_not_sleep_in_xscreensaver__
105
106 extern Bool mono_p;
107
108 struct xscreensaver_function_table {
109
110   const char *progclass;
111   const char * const *defaults;
112   const XrmOptionDescRec *options;
113
114   void           (*setup_cb)   (struct xscreensaver_function_table *, void *);
115   void *         setup_arg;
116
117   void *         (*init_cb)    (Display *, Window);
118   unsigned long  (*draw_cb)    (Display *, Window, void *);
119   void           (*reshape_cb) (Display *, Window, void *,
120                                 unsigned int w, unsigned int h);
121   Bool           (*event_cb)   (Display *, Window, void *, XEvent *);
122   void           (*free_cb)    (Display *, Window, void *);
123
124   Visual *       (*pick_visual_hook) (Screen *);
125   Bool           (*validate_visual_hook) (Screen *, const char *, Visual *);
126
127 };
128
129 extern const char *progname;
130
131 #endif /* __SCREENHACK_I_H__ */