"*ignoreRotation: True \n" \
# define SMOOTH_COLORS
+# define release_drift 0
+# define reshape_drift 0
# define drift_handle_event 0
# include "xlockmore.h" /* in xscreensaver distribution */
-# include "erase.h"
#else /* STANDALONE */
# define ENTRYPOINT /**/
# include "xlock.h" /* in xlockmore distribution */
#ifdef USE_MODULES
ModStruct drift_description =
-{"drift", "init_drift", "draw_drift", "release_drift",
- "refresh_drift", "init_drift", (char *) NULL, &drift_opts,
+{"drift", "init_drift", "draw_drift", (char *) NULL,
+ "refresh_drift", "init_drift", "free_drift", &drift_opts,
10000, 30, 1, 1, 64, 1.0, "",
"Shows cosmic drifting flame fractals", 0, NULL};
long saved_random_bits;
int nbits;
-#ifdef STANDALONE
int erase_countdown;
- eraser_state *eraser;
-#endif
} driftstruct;
static driftstruct *drifts = (driftstruct *) NULL;
}
dp->fractal_len = (dp->fractal_len * MI_COUNT(mi)) / 20;
-#ifndef STANDALONE
MI_CLEARWINDOW(mi);
-#endif
}
static void
}
}
-static void
-free_drift(driftstruct *dp)
+ENTRYPOINT void
+free_drift(ModeInfo * mi)
{
+ driftstruct *dp = &drifts[MI_SCREEN(mi)];
if (dp->ncpoints != NULL) {
(void) free((void *) dp->ncpoints);
dp->ncpoints = (int *) NULL;
if (!dp->ncpoints) {
if ((dp->ncpoints = (int *) malloc(sizeof (int) * MI_NCOLORS(mi))) ==
NULL) {
- free_drift(dp);
+ free_drift(mi);
return;
}
}
if (!dp->cpts) {
if ((dp->cpts = (XPoint *) malloc(MAXBATCH2 * sizeof (XPoint) *
MI_NCOLORS(mi))) == NULL) {
- free_drift(dp);
+ free_drift(mi);
return;
}
}
{
driftstruct *dp;
- if (drifts == NULL) {
- if ((drifts = (driftstruct *) calloc(MI_NUM_SCREENS(mi),
- sizeof (driftstruct))) == NULL)
- return;
- }
+ MI_INIT (mi, drifts);
dp = &drifts[MI_SCREEN(mi)];
dp->width = MI_WIDTH(mi);
if (dp->erase_countdown) {
if (!--dp->erase_countdown) {
- dp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), dp->eraser);
+ initmode(mi, frandom(dp, 2));
+ initfractal(mi);
}
return;
}
- if (dp->eraser) {
- dp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), dp->eraser);
- return;
- }
MI_IS_DRAWN(mi) = True;
dp->timer = 3000;
if (dp->total_points++ > dp->fractal_len) {
draw_flush(mi, dp, window);
if (0 == --dp->nfractals) {
-#ifdef STANDALONE
dp->erase_countdown = 4 * 1000000 / MI_PAUSE(mi);
-#endif /* STANDALONE */
- initmode(mi, frandom(dp, 2));
+ return;
}
initfractal(mi);
}
}
}
-ENTRYPOINT void
-release_drift(ModeInfo * mi)
-{
- if (drifts != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
- free_drift(&drifts[screen]);
- (void) free((void *) drifts);
- drifts = (driftstruct *) NULL;
- }
-}
-
-ENTRYPOINT void
-reshape_drift(ModeInfo * mi, int width, int height)
-{
- MI_CLEARWINDOW(mi);
- init_drift (mi);
-}
-
+#ifndef STANDALONE
ENTRYPOINT void
refresh_drift(ModeInfo * mi)
{
MI_CLEARWINDOW(mi);
}
+#endif
XSCREENSAVER_MODULE ("Drift", drift)