source: trunk/third/xscreensaver/hacks/xlockmore.h @ 20148

Revision 20148, 5.6 KB checked in by ghudson, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r20147, which included commits to RCS files with non-trunk default branches.
Line 
1/* xlockmore.h --- xscreensaver compatibility layer for xlockmore modules.
2 * xscreensaver, Copyright (c) 1997-2003 Jamie Zawinski <jwz@jwz.org>
3 *
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation.  No representations are made about the suitability of this
9 * software for any purpose.  It is provided "as is" without express or
10 * implied warranty.
11 *
12 * The definitions in this file make it possible to compile an xlockmore
13 * module into a standalone program, and thus use it with xscreensaver.
14 * By Jamie Zawinski <jwz@jwz.org> on 10-May-97; based on the ideas
15 * in the older xlock.h by Charles Hannum <mycroft@ai.mit.edu>.  (I had
16 * to redo it, since xlockmore has diverged so far from xlock...)
17 */
18
19#if !defined(PROGCLASS) || !defined(HACK_INIT) || !defined(HACK_DRAW)
20ERROR!  Define PROGCLASS, HACK_INIT, and HACK_DRAW before including xlockmore.h
21#endif
22
23#include "config.h"
24
25#ifndef __STDC__
26ERROR!  Sorry, xlockmore.h requires ANSI C (gcc, for example.)
27  /* (The ansi dependency is that we use string concatenation,
28     and cpp-based stringification of tokens.) */
29#endif
30
31#include <stdio.h>
32#include <math.h>
33#include "xlockmoreI.h"
34
35#ifdef USE_GL
36# include <GL/glx.h>
37  extern GLXContext *init_GL (ModeInfo *);
38  extern void clear_gl_error (void);
39  extern void check_gl_error (const char *type);
40
41  extern void do_fps (ModeInfo *);
42  extern GLfloat fps_1 (ModeInfo *);
43  extern void    fps_2 (ModeInfo *);
44
45# define FreeAllGL(dpy) /* */
46#endif /* !USE_GL */
47
48/* Accessor macros for the ModeInfo structure
49 */
50
51#define MI_DISPLAY(MI)          ((MI)->dpy)
52#define MI_WINDOW(MI)           ((MI)->window)
53#define MI_NUM_SCREENS(MI)      (1)     /* Only manage one screen at a time; */
54#define MI_SCREEN(MI)           (0)     /*  this might be fragile... */
55#define MI_WIN_WHITE_PIXEL(MI)  ((MI)->white)
56#define MI_WIN_BLACK_PIXEL(MI)  ((MI)->black)
57#define MI_NPIXELS(MI)          ((MI)->npixels)
58#define MI_PIXEL(MI,N)          ((MI)->pixels[(N)])
59#define MI_WIN_WIDTH(MI)        ((MI)->xgwa.width)
60#define MI_WIN_HEIGHT(MI)       ((MI)->xgwa.height)
61#define MI_WIN_DEPTH(MI)        ((MI)->xgwa.depth)
62#define MI_WIN_COLORMAP(MI)     ((MI)->xgwa.colormap)
63#define MI_VISUAL(MI)           ((MI)->xgwa.visual)
64#define MI_GC(MI)               ((MI)->gc)
65#define MI_PAUSE(MI)            ((MI)->pause)
66#define MI_WIN_IS_FULLRANDOM(MI)((MI)->fullrandom)
67#define MI_WIN_IS_VERBOSE(MI)   (False)
68#define MI_WIN_IS_INSTALL(MI)   (True)
69#define MI_WIN_IS_MONO(MI)      (mono_p)
70#define MI_WIN_IS_INROOT(MI)    ((MI)->root_p)
71#define MI_WIN_IS_INWINDOW(MI)  (!(MI)->root_p)
72#define MI_WIN_IS_ICONIC(MI)    (False)
73#define MI_WIN_IS_WIREFRAME(MI) ((MI)->wireframe_p)
74#define MI_WIN_IS_USE3D(MI)     ((MI)->threed)
75#define MI_LEFT_COLOR(MI)       ((MI)->threed_left_color)
76#define MI_RIGHT_COLOR(MI)      ((MI)->threed_right_color)
77#define MI_BOTH_COLOR(MI)       ((MI)->threed_both_color)
78#define MI_NONE_COLOR(MI)       ((MI)->threed_none_color)
79#define MI_DELTA3D(MI)          ((MI)->threed_delta)
80#define MI_CYCLES(MI)           ((MI)->cycles)
81#define MI_BATCHCOUNT(MI)       ((MI)->batchcount)
82#define MI_SIZE(MI)             ((MI)->size)
83#define MI_IS_DRAWN(MI)         ((MI)->is_drawn)
84#define MI_IS_FPS(MI)           ((MI)->fps_p)
85#define MI_NCOLORS(MI)          ((MI)->npixels)
86#define MI_NAME(MI)             (progname)
87
88#define MI_COLORMAP(MI)         (MI_WIN_COLORMAP((MI)))
89#define MI_WIDTH(MI)            (MI_WIN_WIDTH((MI)))
90#define MI_HEIGHT(MI)           (MI_WIN_HEIGHT((MI)))
91#define MI_IS_ICONIC(MI)        (MI_WIN_IS_ICONIC((MI)))
92#define MI_IS_WIREFRAME(MI)     (MI_WIN_IS_WIREFRAME((MI)))
93#define MI_IS_MONO(MI)          (MI_WIN_IS_MONO((MI)))
94#define MI_COUNT(MI)            (MI_BATCHCOUNT((MI)))
95#define MI_BLACK_PIXEL(MI)      (MI_WIN_BLACK_PIXEL(MI))
96#define MI_WHITE_PIXEL(MI)      (MI_WIN_WHITE_PIXEL(MI))
97#define MI_IS_FULLRANDOM(MI)    (MI_WIN_IS_FULLRANDOM(MI))
98#define MI_IS_VERBOSE(MI)       (MI_WIN_IS_VERBOSE(MI))
99#define MI_IS_INSTALL(MI)       (MI_WIN_IS_INSTALL(MI))
100#define MI_IS_DEBUG(MI)         (False)
101#define MI_IS_MOUSE(MI)         (False)
102
103#define MI_CLEARWINDOW(mi) XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi))
104
105/* Some other utility macros.
106 */
107#define SINF(n)                 ((float)sin((double)(n)))
108#define COSF(n)                 ((float)cos((double)(n)))
109#define FABSF(n)                ((float)fabs((double)(n)))
110
111#undef MAX
112#undef MIN
113#undef ABS
114#define MAX(a,b)((a)>(b)?(a):(b))
115#define MIN(a,b)((a)<(b)?(a):(b))
116#define ABS(a)((a)<0 ? -(a) : (a))
117
118/* Maximum possible number of colors (*not* default number of colors.) */
119#define NUMCOLORS 256
120
121/* The globals that screenhack.c expects (initialized by xlockmore.c).
122 */
123char *defaults[100];
124XrmOptionDescRec options[100];
125
126/* Prototypes for the actual drawing routines...
127 */
128extern void HACK_INIT(ModeInfo *);
129extern void HACK_DRAW(ModeInfo *);
130
131#ifdef HACK_FREE
132  extern void HACK_FREE(ModeInfo *);
133#else
134# define HACK_FREE 0
135#endif
136
137#ifdef HACK_RESHAPE
138  extern void HACK_RESHAPE(ModeInfo *, int width, int height);
139#else
140# define HACK_RESHAPE 0
141#endif
142
143#ifdef HACK_HANDLE_EVENT
144  extern Bool HACK_HANDLE_EVENT(ModeInfo *, XEvent *e);
145#else
146# define HACK_HANDLE_EVENT 0
147#endif
148
149
150/* Emit code for the entrypoint used by screenhack.c, and pass control
151   down into xlockmore.c with the appropriate parameters.
152 */
153
154char *progclass = PROGCLASS;
155
156void screenhack (Display *dpy, Window window)
157{
158  xlockmore_screenhack (dpy, window,
159
160#ifdef WRITABLE_COLORS
161                        True,
162#else
163                        False,
164#endif
165
166#ifdef UNIFORM_COLORS
167                        True,
168#else
169                        False,
170#endif
171
172#ifdef SMOOTH_COLORS
173                        True,
174#else
175                        False,
176#endif
177
178#ifdef BRIGHT_COLORS
179                        True,
180#else
181                        False,
182#endif
183
184#ifdef EVENT_MASK
185                        EVENT_MASK,
186#else
187                        0,
188#endif
189
190                        HACK_INIT,
191                        HACK_DRAW,
192                        HACK_RESHAPE,
193                        HACK_HANDLE_EVENT,
194                        HACK_FREE);
195}
196
197
198const char *app_defaults = DEFAULTS ;
Note: See TracBrowser for help on using the repository browser.