*/
#ifdef STANDALONE
-#define MODE_drift
-#define PROGCLASS "Drift"
-#define HACK_INIT init_drift
-#define HACK_DRAW draw_drift
-#define drift_opts xlockmore_opts
-#define DEFAULTS "*delay: 10000 \n" \
- "*count: 30 \n" \
- "*ncolors: 200 \n"
-#define SMOOTH_COLORS
-#include "xlockmore.h" /* in xscreensaver distribution */
-#include "erase.h"
+# define MODE_drift
+# define DEFAULTS "*delay: 10000 \n" \
+ "*count: 30 \n" \
+ "*ncolors: 200 \n" \
+ "*fpsSolid: true \n" \
+
+# define SMOOTH_COLORS
+# define reshape_drift 0
+# define drift_handle_event 0
+# include "xlockmore.h" /* in xscreensaver distribution */
+# include "erase.h"
#else /* STANDALONE */
-#include "xlock.h" /* in xlockmore distribution */
-
+# define ENTRYPOINT /**/
+# include "xlock.h" /* in xlockmore distribution */
#endif /* STANDALONE */
#ifdef MODE_drift
static XrmOptionDescRec opts[] =
{
- {(char *) "-grow", (char *) ".drift.grow", XrmoptionNoArg, (caddr_t) "on"},
- {(char *) "+grow", (char *) ".drift.grow", XrmoptionNoArg, (caddr_t) "off"},
- {(char *) "-liss", (char *) ".drift.trail", XrmoptionNoArg, (caddr_t) "on"},
- {(char *) "+liss", (char *) ".drift.trail", XrmoptionNoArg, (caddr_t) "off"}
+ {"-grow", ".drift.grow", XrmoptionNoArg, "on"},
+ {"+grow", ".drift.grow", XrmoptionNoArg, "off"},
+ {"-liss", ".drift.trail", XrmoptionNoArg, "on"},
+ {"+liss", ".drift.trail", XrmoptionNoArg, "off"}
};
static argtype vars[] =
{
- {(caddr_t *) & grow, (char *) "grow", (char *) "Grow", (char *) DEF_GROW, t_Bool},
- {(caddr_t *) & liss, (char *) "liss", (char *) "Liss", (char *) DEF_LISS, t_Bool}
+ {&grow, "grow", "Grow", DEF_GROW, t_Bool},
+ {&liss, "trail", "Trail", DEF_LISS, t_Bool}
};
static OptionStruct desc[] =
{
- {(char *) "-/+grow", (char *) "turn on/off growing fractals, else they are animated"},
- {(char *) "-/+liss", (char *) "turn on/off using lissojous figures to get points"}
+ {"-/+grow", "turn on/off growing fractals, else they are animated"},
+ {"-/+liss", "turn on/off using lissojous figures to get points"}
};
-ModeSpecOpt drift_opts =
+ENTRYPOINT ModeSpecOpt drift_opts =
{sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc};
#ifdef USE_MODULES
short lasthalf;
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
}
-void
+ENTRYPOINT void
init_drift(ModeInfo * mi)
{
driftstruct *dp;
}
-void
+ENTRYPOINT void
draw_drift(ModeInfo * mi)
{
Window window = MI_WINDOW(mi);
if (dp->ncpoints == NULL)
return;
+ if (dp->erase_countdown) {
+ if (!--dp->erase_countdown) {
+ dp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), dp->eraser);
+ }
+ 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;
while (dp->timer) {
draw_flush(mi, dp, window);
if (0 == --dp->nfractals) {
#ifdef STANDALONE
- XSync(MI_DISPLAY(mi), False);
- sleep(4); /* #### make settable */
- erase_full_window(MI_DISPLAY(mi), MI_WINDOW(mi));
+ dp->erase_countdown = 4 * 1000000 / MI_PAUSE(mi);
#endif /* STANDALONE */
initmode(mi, frandom(dp, 2));
}
}
}
-void
+ENTRYPOINT void
release_drift(ModeInfo * mi)
{
if (drifts != NULL) {
}
}
-void
+ENTRYPOINT void
refresh_drift(ModeInfo * mi)
{
MI_CLEARWINDOW(mi);
}
+XSCREENSAVER_MODULE ("Drift", drift)
+
#endif /* MODE_drift */