X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fhypnowheel.c;h=d92e147b0baf539c09a5b6d5b6ee9345e7ccc2c9;hb=aa75c7476aeaa84cf3abc192b376a8b03c325213;hp=c05f503d3b994296d5b0a34546262b94216e92fa;hpb=6b1c86cf395f59389e4ece4ea8f4bea2c332745b;p=xscreensaver diff --git a/hacks/glx/hypnowheel.c b/hacks/glx/hypnowheel.c index c05f503d..d92e147b 100644 --- a/hacks/glx/hypnowheel.c +++ b/hacks/glx/hypnowheel.c @@ -22,10 +22,10 @@ "*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))) @@ -63,7 +63,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 +82,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 = { @@ -150,6 +150,14 @@ reshape_hypnowheel (ModeInfo *mi, int width, int height) 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); } @@ -176,17 +184,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 +212,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 +305,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 */