X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Flockward.c;h=f15374b213824ba9e86a1e442385cd6c1e8dce08;hb=39809ded547bdbb08207d3e514950425215b4410;hp=60d684d10878afce7602bc92774411c83e04060c;hpb=d5186197bc394e10a4402f7f6d23fbb14103bc50;p=xscreensaver diff --git a/hacks/glx/lockward.c b/hacks/glx/lockward.c index 60d684d1..f15374b2 100644 --- a/hacks/glx/lockward.c +++ b/hacks/glx/lockward.c @@ -39,7 +39,7 @@ #define DEFAULTS "*delay: 20000 \n"\ "*showFPS: False \n" -#define refresh_lockward 0 +#define release_lockward 0 #define NUMOF(x) (sizeof ((x)) / sizeof ((*x))) @@ -136,7 +136,7 @@ typedef struct lockward_context { /*************************************************************************** * Prototypes. */ -static void free_lockward (lockward_context *ctx); +ENTRYPOINT void free_lockward (ModeInfo *mi); /*************************************************************************** @@ -203,9 +203,20 @@ ENTRYPOINT ModeSpecOpt lockward_opts = { ENTRYPOINT void reshape_lockward (ModeInfo *mi, int width, int height) { + lockward_context *ctx = &g_ctx[MI_SCREEN (mi)]; GLfloat h = (GLfloat) height / (GLfloat) width; + int y = 0; + + if (width > height * 5) { /* tiny window: show middle */ + height = width * 9/16; + y = -height/2; + h = height / (GLfloat) width; + } + + glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), + *(ctx->glx_context)); - glViewport (0, 0, (GLint) width, (GLint) height); + glViewport (0, y, (GLint) width, (GLint) height); glMatrixMode (GL_PROJECTION); glLoadIdentity (); @@ -827,15 +838,7 @@ init_lockward (ModeInfo *mi) lockward_context *ctx; int i, n; - if (!g_ctx) { - g_ctx = (lockward_context *) calloc (MI_NUM_SCREENS (mi), - sizeof (lockward_context)); - if (!g_ctx) { - fprintf (stderr, "%s: can't allocate context.\n", - progname); - exit (1); - } - } + MI_INIT (mi, g_ctx); ctx = &g_ctx[MI_SCREEN (mi)]; ctx->glx_context = init_GL (mi); @@ -853,7 +856,8 @@ init_lockward (ModeInfo *mi) /* ctx->blades_inner = glGenLists (NRADII); */ ctx->rings = glGenLists (NRADII - 1); ctx->blendmode = 0; - ctx->fps = 1000000 / MI_DELAY (mi); +/* WTF? ctx->fps = 1000000 / MI_DELAY (mi); */ + ctx->fps = 60; ctx->nextblink = calc_interval_frames (ctx, g_blinkidle_min, g_blinkidle_max); ctx->blink.drawfunc = NULL; @@ -927,11 +931,18 @@ init_lockward (ModeInfo *mi) } } -static void -free_lockward (lockward_context *ctx) +ENTRYPOINT void +free_lockward (ModeInfo *mi) { + lockward_context *ctx = &g_ctx[MI_SCREEN (mi)]; int i; + if (!ctx->glx_context) + return; + + glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), + *(ctx->glx_context)); + if (ctx->blink.noise) free (ctx->blink.noise); if (glIsList (ctx->rings)) @@ -951,25 +962,6 @@ free_lockward (lockward_context *ctx) } } -ENTRYPOINT void -release_lockward (ModeInfo *mi) -{ - int i; - - if (!g_ctx) - return; - - for (i = MI_NUM_SCREENS (mi); --i >= 0; ) { - if (g_ctx[i].glx_context) - glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), - *(g_ctx[i].glx_context)); - free_lockward (&g_ctx[i]); - } - - FreeAllGL (mi); - free (g_ctx); g_ctx = NULL; -} - XSCREENSAVER_MODULE ("Lockward", lockward)