*/
#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" \
- "*fullrandom: True \n" \
- "*verbose: False \n"
+ "*ncolors: 100 \n"
+# define reshape_crystal 0
+# define crystal_handle_event 0
# include "xlockmore.h" /* in xscreensaver distribution */
#else /* STANDALONE */
# include "xlock.h" /* in xlockmore distribution */
#define min(a,b) ((a) <= (b) ? (a) : (b))
-#ifdef STANDALONE
-void release_crystal(ModeInfo * mi);
-#endif
-
static int nx, ny;
static Bool unit_cell, grid_cell, centre, maxsize, cycle_p;
static XrmOptionDescRec opts[] =
{
- {"-nx", "crystal.nx", XrmoptionSepArg, (caddr_t) NULL},
- {"-ny", "crystal.ny", XrmoptionSepArg, (caddr_t) NULL},
- {"-centre", ".crystal.centre", XrmoptionNoArg, (caddr_t) "on"},
- {"+centre", ".crystal.centre", XrmoptionNoArg, (caddr_t) "off"},
- {"-maxsize", ".crystal.maxsize", XrmoptionNoArg, (caddr_t) "on"},
- {"+maxsize", ".crystal.maxsize", XrmoptionNoArg, (caddr_t) "off"},
- {"-cell", ".crystal.cell", XrmoptionNoArg, (caddr_t) "on"},
- {"+cell", ".crystal.cell", XrmoptionNoArg, (caddr_t) "off"},
- {"-grid", ".crystal.grid", XrmoptionNoArg, (caddr_t) "on"},
- {"+grid", ".crystal.grid", XrmoptionNoArg, (caddr_t) "off"},
- {"-shift", ".crystal.shift", XrmoptionNoArg, (caddr_t) "on"},
- {"+shift", ".crystal.shift", XrmoptionNoArg, (caddr_t) "off"}
+ {"-nx", "crystal.nx", XrmoptionSepArg, 0},
+ {"-ny", "crystal.ny", XrmoptionSepArg, 0},
+ {"-centre", ".crystal.centre", XrmoptionNoArg, "on"},
+ {"+centre", ".crystal.centre", XrmoptionNoArg, "off"},
+ {"-maxsize", ".crystal.maxsize", XrmoptionNoArg, "on"},
+ {"+maxsize", ".crystal.maxsize", XrmoptionNoArg, "off"},
+ {"-cell", ".crystal.cell", XrmoptionNoArg, "on"},
+ {"+cell", ".crystal.cell", XrmoptionNoArg, "off"},
+ {"-grid", ".crystal.grid", XrmoptionNoArg, "on"},
+ {"+grid", ".crystal.grid", XrmoptionNoArg, "off"},
+ {"-shift", ".crystal.shift", XrmoptionNoArg, "on"},
+ {"+shift", ".crystal.shift", XrmoptionNoArg, "off"}
};
static argtype vars[] =
{"-/+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
}
}
-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;
+#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);
XSetFunction(display, cryst->gc, GXcopy);
}
-void
+ENTRYPOINT void
refresh_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
XSetFunction(display, cryst->gc, GXcopy);
}
-void
+ENTRYPOINT void
release_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
}
}
-void
+ENTRYPOINT void
init_crystal(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
crystal_setupatom(atom0, cryst->gamma);
crystal_drawatom(mi, atom0);
}
- XSync(display, False);
XSetFunction(display, cryst->gc, GXcopy);
}
+
+XSCREENSAVER_MODULE ("Crystal", crystal)