"*showFPS: False \n" \
"*fpsSolid: True \n" \
"*wireframe: False \n" \
+ "*suppressRotationAnimation: True\n" \
# define refresh_hypnowheel 0
# define release_hypnowheel 0
-# define hypnowheel_handle_event 0
#undef countof
#define countof(x) (sizeof((x))/sizeof((*x)))
static GLfloat speed;
static GLfloat twistiness;
-static GLfloat nlayers;
+static GLint nlayers;
static Bool do_wander;
static Bool do_symmetric;
{&do_symmetric, "symmetric", "Symmetric", DEF_SYMMETRIC, t_Bool},
{&speed, "speed", "Speed", DEF_SPEED, t_Float},
{&twistiness, "twistiness", "Twistiness", DEF_TWISTINESS, t_Float},
- {&nlayers, "layers", "Layers", DEF_LAYERS, t_Float},
+ {&nlayers, "layers", "Layers", DEF_LAYERS, t_Int},
};
ENTRYPOINT ModeSpecOpt hypnowheel_opts = {
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
+# ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */
+ {
+ int o = (int) current_device_rotation();
+ if (o != 0 && o != 180 && o != -180)
+ glScalef (1/h, 1/h, 1/h);
+ }
+# endif
+
glClear(GL_COLOR_BUFFER_BIT);
}
int wire = MI_IS_WIREFRAME(mi);
int i;
- if (!bps) {
- bps = (hypnowheel_configuration *)
- calloc (MI_NUM_SCREENS(mi), sizeof (hypnowheel_configuration));
- if (!bps) {
- fprintf(stderr, "%s: out of memory\n", progname);
- exit(1);
- }
- }
+ MI_INIT (mi, bps, NULL);
bp = &bps[MI_SCREEN(mi)];
reshape_hypnowheel (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
- bp->rot = make_rotator (0, 0, 0, 0, speed * 0.0025, False);
+ if (! bp->rot)
+ bp->rot = make_rotator (0, 0, 0, 0, speed * 0.0025, False);
bp->ncolors = 1024;
- bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor));
+ if (!bp->colors)
+ bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor));
make_smooth_colormap (0, 0, 0,
bp->colors, &bp->ncolors,
False, 0, False);
if (MI_COUNT(mi) < 2) MI_COUNT(mi) = 2;
if (nlayers < 1) nlayers = 1;
- bp->discs = (disc *) calloc (nlayers, sizeof (disc));
+ if (!bp->discs)
+ bp->discs = (disc *) calloc (nlayers, sizeof (disc));
for (i = 0; i < nlayers; i++)
{
spin_speed += frand (spin_speed / 5);
wander_speed += frand (wander_speed * 3);
+ if (!bp->discs[i].rot)
bp->discs[i].rot = make_rotator (spin_speed, spin_speed, spin_speed,
spin_accel,
(do_wander ? wander_speed : 0),
glXSwapBuffers(dpy, window);
}
+ENTRYPOINT Bool
+hypnowheel_handle_event (ModeInfo *mi, XEvent *event)
+{
+ if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
+ {
+ init_hypnowheel (mi);
+ return True;
+ }
+ return False;
+}
+
+
XSCREENSAVER_MODULE ("Hypnowheel", hypnowheel)
#endif /* USE_GL */