X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fcage.c;h=654510d28e51f15f159e7a69965a4e8f1cbea6d9;hb=39809ded547bdbb08207d3e514950425215b4410;hp=268d0830c604255b979221fc5d699c54fb3d1ed4;hpb=aa75c7476aeaa84cf3abc192b376a8b03c325213;p=xscreensaver diff --git a/hacks/glx/cage.c b/hacks/glx/cage.c index 268d0830..654510d2 100644 --- a/hacks/glx/cage.c +++ b/hacks/glx/cage.c @@ -82,8 +82,9 @@ static const char sccsid[] = "@(#)cage.c 5.01 2001/03/01 xlockmore"; "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define refresh_cage 0 -# define cage_handle_event 0 +# define free_cage 0 +# define release_cage 0 +# define cage_handle_event xlockmore_no_events # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ @@ -103,7 +104,7 @@ ENTRYPOINT ModeSpecOpt cage_opts = #ifdef USE_MODULES ModStruct cage_description = -{"cage", "init_cage", "draw_cage", "release_cage", +{"cage", "init_cage", "draw_cage", NULL, "draw_cage", "change_cage", (char *) NULL, &cage_opts, 25000, 1, 1, 1, 1.0, 4, "", "Shows the Impossible Cage, an Escher-like GL scene", 0, NULL}; @@ -295,8 +296,14 @@ reshape_cage(ModeInfo * mi, int width, int height) { cagestruct *cp = &cage[MI_SCREEN(mi)]; int i; + int y = 0; - glViewport(0, 0, cp->WindW = (GLint) width, cp->WindH = (GLint) height); + if (width > height * 5) { /* tiny window: show middle */ + height = width * 9/16; + y = -height/2; + } + + glViewport(0, y, cp->WindW = (GLint) width, cp->WindH = (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); @@ -381,35 +388,12 @@ pinit(ModeInfo *mi) glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); } -ENTRYPOINT void -release_cage (ModeInfo * mi) -{ - if (cage != NULL) { - int screen; - - for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { - cagestruct *cp = &cage[screen]; - - if (cp->glx_context) { - cp->glx_context = (GLXContext *) NULL; - } - } - (void) free((void *) cage); - cage = (cagestruct *) NULL; - } - FreeAllGL(mi); -} - ENTRYPOINT void init_cage (ModeInfo * mi) { cagestruct *cp; - if (cage == NULL) { - if ((cage = (cagestruct *) calloc(MI_NUM_SCREENS(mi), - sizeof (cagestruct))) == NULL) - return; - } + MI_INIT (mi, cage); cp = &cage[MI_SCREEN(mi)]; cp->step = NRAND(90); @@ -469,7 +453,7 @@ draw_cage (ModeInfo * mi) glRotatef(25 + cos(cp->step * 5) * 6, 1, 0, 0); glRotatef(204.5 - sin(cp->step * 5) * 8, 0, 1, 0); if (!draw_impossiblecage(mi, cp, MI_IS_WIREFRAME(mi))) { - release_cage(mi); + MI_ABORT(mi); return; }