X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fhypnowheel.c;h=508229016decf6a94b2f80e09c54db7304f4647a;hb=6afd6db0ae9396cd7ff897ade597cd5483f49b0e;hp=c05f503d3b994296d5b0a34546262b94216e92fa;hpb=6b1c86cf395f59389e4ece4ea8f4bea2c332745b;p=xscreensaver diff --git a/hacks/glx/hypnowheel.c b/hacks/glx/hypnowheel.c index c05f503d..50822901 100644 --- a/hacks/glx/hypnowheel.c +++ b/hacks/glx/hypnowheel.c @@ -25,7 +25,6 @@ # define refresh_hypnowheel 0 # define release_hypnowheel 0 -# define hypnowheel_handle_event 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -63,7 +62,7 @@ static hypnowheel_configuration *bps = NULL; static GLfloat speed; static GLfloat twistiness; -static GLfloat nlayers; +static GLint nlayers; static Bool do_wander; static Bool do_symmetric; @@ -82,7 +81,7 @@ static argtype vars[] = { {&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 = { @@ -176,17 +175,20 @@ init_hypnowheel (ModeInfo *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++) { @@ -201,6 +203,7 @@ init_hypnowheel (ModeInfo *mi) 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), @@ -293,6 +296,18 @@ draw_hypnowheel (ModeInfo *mi) 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 */