*/
#ifdef STANDALONE
-#define MODE_braid
-#define PROGCLASS "Braid"
-#define HACK_INIT init_braid
-#define HACK_DRAW draw_braid
-#define braid_opts xlockmore_opts
-#define DEFAULTS "*delay: 1000 \n" \
- "*count: 15 \n" \
- "*cycles: 100 \n" \
- "*size: -7 \n" \
- "*ncolors: 64 \n"
-#define UNIFORM_COLORS
-#include "xlockmore.h"
-#include "erase.h"
+# define MODE_braid
+# define DEFAULTS "*delay: 1000 \n" \
+ "*count: 15 \n" \
+ "*cycles: 100 \n" \
+ "*size: -7 \n" \
+ "*ncolors: 64 \n" \
+ "*fpsSolid: true \n" \
+ "*ignoreRotation: True" \
+
+# define UNIFORM_COLORS
+# include "xlockmore.h"
+# include "erase.h"
#else /* STANDALONE */
-#include "xlock.h"
-
+# include "xlock.h"
+# define ENTRYPOINT /**/
#endif /* STANDALONE */
#ifdef MODE_braid
-ModeSpecOpt braid_opts =
-{0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL};
+ENTRYPOINT ModeSpecOpt braid_opts = {0, NULL, 0, NULL, NULL};
#ifdef USE_MODULES
ModStruct braid_description =
float top, bottom, left, right;
int age;
int color_direction;
+#ifdef STANDALONE
+ eraser_state *eraser;
+#endif
} braidtype;
static braidtype *braids = (braidtype *) NULL;
return c;
}
-void
+ENTRYPOINT void
init_braid(ModeInfo * mi)
{
braidtype *braid;
/* jwz: go in the other direction sometimes. */
braid->color_direction = ((LRAND() & 1) ? 1 : -1);
+#ifndef STANDALONE
MI_CLEARWINDOW(mi);
+#endif
min_length = (braid->center_x > braid->center_y) ?
braid->center_y : braid->center_x;
braid->nstrands = INTRAND(MINSTRANDS,
MAX(MIN(MIN(MAXSTRANDS, MI_COUNT(mi)),
(int) ((braid->max_radius - braid->min_radius) / 5.0)), MINSTRANDS));
- braid->braidlength = INTRAND(MINLENGTH, MIN(MAXLENGTH, braid->nstrands * 6));
+ braid->braidlength = INTRAND(MINLENGTH, MIN(MAXLENGTH -1, braid->nstrands * 6));
for (i = 0; i < braid->braidlength; i++) {
braid->braidword[i] =
braid->components[i] *= -1;
}
-void
+ENTRYPOINT void
draw_braid(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
return;
braid = &braids[MI_SCREEN(mi)];
+#ifdef STANDALONE
+ if (braid->eraser) {
+ braid->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), braid->eraser);
+ return;
+ }
+#endif
+
MI_IS_DRAWN(mi) = True;
XSetLineAttributes(display, MI_GC(mi), braid->linewidth,
LineSolid,
if (++braid->age > MI_CYCLES(mi)) {
#ifdef STANDALONE
- erase_full_window(MI_DISPLAY(mi), MI_WINDOW(mi));
+ braid->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), braid->eraser);
#endif
init_braid(mi);
}
}
-void
+ENTRYPOINT void
+reshape_braid(ModeInfo * mi, int width, int height)
+{
+ XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi));
+ init_braid (mi);
+}
+
+ENTRYPOINT Bool
+braid_handle_event (ModeInfo *mi, XEvent *event)
+{
+ if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
+ {
+ reshape_braid (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+ return True;
+ }
+
+ return False;
+}
+
+ENTRYPOINT void
release_braid(ModeInfo * mi)
{
if (braids != NULL) {
}
}
-void
+ENTRYPOINT void
refresh_braid(ModeInfo * mi)
{
MI_CLEARWINDOW(mi);
}
+XSCREENSAVER_MODULE ("Braid", braid)
+
#endif /* MODE_braid */