X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fsuperquadrics.c;h=3c0833543deedcefd181a6f37b100540316a65cb;hb=39809ded547bdbb08207d3e514950425215b4410;hp=f7eb3e6f9b2c6eff5c4a38d160d6928a96e58e04;hpb=c1b9b55ad8d59dc05ef55e316aebf5863e7dfa56;p=xscreensaver diff --git a/hacks/glx/superquadrics.c b/hacks/glx/superquadrics.c index f7eb3e6f..3c083354 100644 --- a/hacks/glx/superquadrics.c +++ b/hacks/glx/superquadrics.c @@ -75,8 +75,11 @@ static const char sccsid[] = "@(#)superquadrics.c 4.07 97/11/24 xlockmore"; "*count: 25 \n" \ "*cycles: 40 \n" \ "*showFPS: False \n" \ - "*wireframe: False \n" + "*wireframe: False \n" \ + "*suppressRotationAnimation: True\n" \ +# define free_superquadrics 0 +# define release_superquadrics 0 # define superquadrics_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -114,7 +117,7 @@ ENTRYPOINT ModeSpecOpt superquadrics_opts = #ifdef USE_MODULES ModStruct superquadrics_description = -{"superquadrics", "init_superquadrics", "draw_superquadrics", "release_superquadrics", +{"superquadrics", "init_superquadrics", "draw_superquadrics", NULL, "refresh_superquadrics", "init_superquadrics", NULL, &superquadrics_opts, 1000, 25, 40, 1, 4, 1.0, "", "Shows 3D mathematical shapes", 0, NULL}; @@ -547,8 +550,9 @@ NextSuperquadric(superquadricsstruct * sp) } static int -DisplaySuperquadrics(superquadricsstruct * sp) +DisplaySuperquadrics(ModeInfo *mi) { + superquadricsstruct *sp = &superquadrics[MI_SCREEN(mi)]; int polys = 0; glDrawBuffer(GL_BACK); if (sp->wireframe) @@ -568,6 +572,17 @@ DisplaySuperquadrics(superquadricsstruct * sp) SetCull(0, sp); + glScalef(0.7, 0.7, 0.7); /* jwz: scale it down a bit */ + +# ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ + { + GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); + int o = (int) current_device_rotation(); + if (o != 0 && o != 180 && o != -180) + glScalef (1/h, 1/h, 1/h); + } +# endif + polys = DoneScale(sp); glPopMatrix(); @@ -577,10 +592,11 @@ DisplaySuperquadrics(superquadricsstruct * sp) } static int -NextSuperquadricDisplay(superquadricsstruct * sp) +NextSuperquadricDisplay(ModeInfo *mi) { + superquadricsstruct *sp = &superquadrics[MI_SCREEN(mi)]; NextSuperquadric(sp); - return DisplaySuperquadrics(sp); + return DisplaySuperquadrics(mi); } #define MINSIZE 200 @@ -603,7 +619,14 @@ ReshapeSuperquadrics(int w, int h) glViewport(0, 0, w, h); } #else - glViewport(0, 0, w, h); + int y = 0; + + if (w > h * 5) { /* tiny window: show middle */ + h = w; + y = -h/2; + } + + glViewport(0, y, w, h); #endif glMatrixMode(GL_PROJECTION); @@ -665,7 +688,6 @@ InitSuperquadrics(int wfmode, int snorm, int res, int count, float speed, superq if (snorm) sp->shownorms = 1; - glClearColor(0.0,0.0,0.0,1.0); glClearDepth(1.0); if (sp->wireframe) { @@ -713,11 +735,7 @@ init_superquadrics(ModeInfo * mi) superquadricsstruct *sp; - if (superquadrics == NULL) { - if ((superquadrics = (superquadricsstruct *) calloc(MI_NUM_SCREENS(mi), - sizeof (superquadricsstruct))) == NULL) - return; - } + MI_INIT (mi, superquadrics); sp = &superquadrics[screen]; sp->mono = (MI_IS_MONO(mi) ? 1 : 0); @@ -740,7 +758,7 @@ init_superquadrics(ModeInfo * mi) MI_COUNT(mi), MI_CYCLES(mi), spinspeed, sp); ReshapeSuperquadrics(MI_WIDTH(mi), MI_HEIGHT(mi)); - DisplaySuperquadrics(sp); + DisplaySuperquadrics(mi); glFinish(); glXSwapBuffers(display, window); } else { @@ -760,18 +778,20 @@ draw_superquadrics(ModeInfo * mi) glXMakeCurrent(display, window, *(sp->glx_context)); - mi->polygon_count = NextSuperquadricDisplay(sp); + mi->polygon_count = NextSuperquadricDisplay(mi); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(display, window); } +#ifndef STANDALONE ENTRYPOINT void refresh_superquadrics(ModeInfo * mi) { /* Nothing happens here */ } +#endif ENTRYPOINT void reshape_superquadrics(ModeInfo * mi, int width, int height) @@ -779,16 +799,6 @@ reshape_superquadrics(ModeInfo * mi, int width, int height) ReshapeSuperquadrics(MI_WIDTH(mi), MI_HEIGHT(mi)); } -ENTRYPOINT void -release_superquadrics(ModeInfo * mi) -{ - if (superquadrics != NULL) { - (void) free((void *) superquadrics); - superquadrics = NULL; - } - FreeAllGL(mi); -} - #endif