X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fprovidence.c;h=fcf8d316f540206ab8ed51cd1d07a1f09ba4e418;hb=d1ae2829ff0fd2a96c16a0c8c5420efaa47d7b30;hp=1f9e3bda979f3b1eeec919498dd8843ddd49856f;hpb=f8cf5ac7b2f53510f80a0eaf286a25298be17bfe;p=xscreensaver diff --git a/hacks/glx/providence.c b/hacks/glx/providence.c index 1f9e3bda..fcf8d316 100644 --- a/hacks/glx/providence.c +++ b/hacks/glx/providence.c @@ -74,7 +74,7 @@ ModStruct providence_description = { #define EYE_PARTICLE_COUNT 2000 -#define LOOKUPSIZE 3600 +#define LOOKUPSIZE (3600/5) /* 3600 was way too much RAM on iOS */ #define EYELENGTH 300 #define EPSILON 0.0001 @@ -274,7 +274,7 @@ static void update_particles(providencestruct *mp) int x = mp->eyeparticles[i][1] + random()%(cos(mp->theta) < 0.0 ? 8 : 16); /* reset if dead */ - if(x > EYELENGTH || random()%(cos(mp->theta) < 0.0 ? 40 : 10) == 0) { + if(x >= EYELENGTH || random()%(cos(mp->theta) < 0.0 ? 40 : 10) == 0) { /* if(x > EYELENGTH || (x > EYELENGTH/(2/3.0) && random()%7 == 0)) { */ mp->eyeparticles[i][0] = random()%LOOKUPSIZE; @@ -644,49 +644,27 @@ ENTRYPOINT Bool providence_handle_event(ModeInfo *mi, XEvent *event) switch(event->xany.type) { case ButtonPress: - switch(event->xbutton.button) { - - case Button1: - mp->button_down_p = True; - gltrackball_start(mp->trackball, - event->xbutton.x, event->xbutton.y, - MI_WIDTH (mi), MI_HEIGHT (mi)); - break; - case Button4: mp->camera_velocity += 1.0; - break; - + return True; case Button5: mp->camera_velocity -= 1.0; + return True; + default: break; } - - break; - - case ButtonRelease: - - switch(event->xbutton.button) { - case Button1: - mp->button_down_p = False; - break; - } - - break; - - case MotionNotify: - if(mp->button_down_p) - gltrackball_track(mp->trackball, - event->xmotion.x, event->xmotion.y, - MI_WIDTH (mi), MI_HEIGHT (mi)); break; - default: - return False; + break; } - return True; + if (gltrackball_event_handler (event, mp->trackball, + MI_WIDTH (mi), MI_HEIGHT (mi), + &mp->button_down_p)) + return True; + + return False; } ENTRYPOINT void init_providence(ModeInfo *mi) @@ -699,7 +677,7 @@ ENTRYPOINT void init_providence(ModeInfo *mi) return; } mp = &providence[MI_SCREEN(mi)]; - mp->trackball = gltrackball_init (); + mp->trackball = gltrackball_init (False); mp->position0[0] = 1; mp->position0[1] = 5; @@ -711,6 +689,10 @@ ENTRYPOINT void init_providence(ModeInfo *mi) mp->mono = MI_IS_MONO(mi); mp->wire = MI_IS_WIREFRAME(mi); +# ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ + mp->wire = 0; +# endif + /* make multiple screens rotate at slightly different rates. */ mp->theta_scale = 0.7 + frand(0.6); @@ -782,9 +764,7 @@ ENTRYPOINT void draw_providence(ModeInfo * mi) /* rotate providence */ glTranslatef(0.0, 0.0, mp->camera_z + sin(mp->theta/4.0)); glRotatef(10.0+20.0*sin(mp->theta/2.0), 1.0, 0.0, 0.0); - glRotatef(-current_device_rotation(), 0, 0, 1); gltrackball_rotate(mp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); glRotatef(mp->theta * 180.0 / Pi, 0.0, -1.0, 0.0); /* draw providence */