projects
/
xscreensaver
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
From http://www.jwz.org/xscreensaver/xscreensaver-5.21.tar.gz
[xscreensaver]
/
hacks
/
crystal.c
diff --git
a/hacks/crystal.c
b/hacks/crystal.c
index 15c01ba3ffb718c2fee0622dc668f405d0d6ab4f..a1c501d84978099dd886ceb4dd11a3a531996ba0 100644
(file)
--- a/
hacks/crystal.c
+++ b/
hacks/crystal.c
@@
-69,17
+69,14
@@
static const char sccsid[] = "@(#)crystal.c 4.12 98/09/10 xlockmore";
*/
#ifdef STANDALONE
*/
#ifdef STANDALONE
-# define PROGCLASS "Crystal"
-# define HACK_INIT init_crystal
-# define HACK_DRAW draw_crystal
-# define crystal_opts xlockmore_opts
# define DEFAULTS "*delay: 60000 \n" \
"*count: -500 \n" \
"*cycles: 200 \n" \
"*size: -15 \n" \
"*ncolors: 100 \n" \
# define DEFAULTS "*delay: 60000 \n" \
"*count: -500 \n" \
"*cycles: 200 \n" \
"*size: -15 \n" \
"*ncolors: 100 \n" \
- "*fullrandom: True \n" \
- "*verbose: False \n"
+ "*fpsSolid: true \n" \
+
+# define crystal_handle_event 0
# include "xlockmore.h" /* in xscreensaver distribution */
#else /* STANDALONE */
# include "xlock.h" /* in xlockmore distribution */
# include "xlockmore.h" /* in xscreensaver distribution */
#else /* STANDALONE */
# include "xlock.h" /* in xlockmore distribution */
@@
-96,11
+93,10
@@
static const char sccsid[] = "@(#)crystal.c 4.12 98/09/10 xlockmore";
#define DEF_MAXSIZE "False"
#define DEF_CYCLE "True"
#define DEF_MAXSIZE "False"
#define DEF_CYCLE "True"
-#define min(a,b) ((a) <= (b) ? (a) : (b))
+#undef NRAND
+#define NRAND(n) ( (n) ? (int) (LRAND() % (n)) : 0)
-#ifdef STANDALONE
-void release_crystal(ModeInfo * mi);
-#endif
+#define min(a,b) ((a) <= (b) ? (a) : (b))
static int nx, ny;
static int nx, ny;
@@
-143,7
+139,7
@@
static OptionStruct desc[] =
{"-/+shift", "turn on/off colour cycling"}
};
{"-/+shift", "turn on/off colour cycling"}
};
-ModeSpecOpt crystal_opts =
+
ENTRYPOINT
ModeSpecOpt crystal_opts =
{sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc};
#ifdef USE_MODULES
{sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc};
#ifdef USE_MODULES
@@
-560,13
+556,21
@@
crystal_drawatom(ModeInfo * mi, crystalatom * atom0)
}
}
}
}
-void
+ENTRYPOINT void init_crystal(ModeInfo * mi);
+ENTRYPOINT void release_crystal(ModeInfo * mi);
+
+
+ENTRYPOINT void
draw_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
crystalstruct *cryst = &crystals[MI_SCREEN(mi)];
int i;
draw_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
crystalstruct *cryst = &crystals[MI_SCREEN(mi)];
int i;
+#ifdef HAVE_COCOA /* Don't second-guess Quartz's double-buffering */
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+#endif
+
if (cryst->no_colors) {
release_crystal(mi);
init_crystal(mi);
if (cryst->no_colors) {
release_crystal(mi);
init_crystal(mi);
@@
-618,7
+622,7
@@
draw_crystal(ModeInfo * mi)
XSetFunction(display, cryst->gc, GXcopy);
}
XSetFunction(display, cryst->gc, GXcopy);
}
-void
+
ENTRYPOINT
void
refresh_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
refresh_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
@@
-785,7
+789,7
@@
refresh_crystal(ModeInfo * mi)
XSetFunction(display, cryst->gc, GXcopy);
}
XSetFunction(display, cryst->gc, GXcopy);
}
-void
+
ENTRYPOINT
void
release_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
release_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
@@
-821,7
+825,7
@@
release_crystal(ModeInfo * mi)
}
}
}
}
-void
+
ENTRYPOINT
void
init_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
init_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
@@
-980,9
+984,12
@@
init_crystal(ModeInfo * mi)
cryst->offset_w = (int) (cryst->b * 0.5);
}
} else {
cryst->offset_w = (int) (cryst->b * 0.5);
}
} else {
+ int max_repeat = 10;
cryst->offset_w = -1;
cryst->offset_w = -1;
- while (cryst->offset_w < 4 || (int) (cryst->offset_w - cryst->b *
- sin((cryst->gamma - 90) * PI_RAD)) < 4) {
+ while (max_repeat-- &&
+ (cryst->offset_w < 4 || (int) (cryst->offset_w - cryst->b *
+ sin((cryst->gamma - 90) * PI_RAD)) < 4)
+ ) {
cryst->b = NRAND((int) (cryst->win_height / (cos((cryst->gamma - 90) *
PI_RAD))) - cell_min) + cell_min;
if (cryst->planegroup > 8)
cryst->b = NRAND((int) (cryst->win_height / (cos((cryst->gamma - 90) *
PI_RAD))) - cell_min) + cell_min;
if (cryst->planegroup > 8)
@@
-1259,6
+1266,14
@@
init_crystal(ModeInfo * mi)
crystal_setupatom(atom0, cryst->gamma);
crystal_drawatom(mi, atom0);
}
crystal_setupatom(atom0, cryst->gamma);
crystal_drawatom(mi, atom0);
}
- XSync(display, False);
XSetFunction(display, cryst->gc, GXcopy);
}
XSetFunction(display, cryst->gc, GXcopy);
}
+
+ENTRYPOINT void
+reshape_crystal(ModeInfo * mi, int width, int height)
+{
+ release_crystal(mi);
+ init_crystal(mi);
+}
+
+XSCREENSAVER_MODULE ("Crystal", crystal)