*/
#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" \
+ "*ignoreRotation: True \n" \
+
+# define SMOOTH_COLORS
+# 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[] =
{
{&grow, "grow", "Grow", DEF_GROW, t_Bool},
- {&liss, "liss", "Liss", DEF_LISS, 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
+reshape_drift(ModeInfo * mi, int width, int height)
+{
+ MI_CLEARWINDOW(mi);
+ init_drift (mi);
+}
+
+ENTRYPOINT void
refresh_drift(ModeInfo * mi)
{
MI_CLEARWINDOW(mi);
}
+ENTRYPOINT Bool
+drift_handle_event (ModeInfo *mi, XEvent *event)
+{
+ if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
+ {
+ reshape_drift (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+ return True;
+ }
+ return False;
+}
+
+
+XSCREENSAVER_MODULE ("Drift", drift)
+
#endif /* MODE_drift */