#define DEFAULTS "*delay: 20000 \n"\
"*showFPS: False \n"
-#define refresh_lockward 0
+#define release_lockward 0
#define NUMOF(x) (sizeof ((x)) / sizeof ((*x)))
/***************************************************************************
* Prototypes.
*/
-static void free_lockward (lockward_context *ctx);
+ENTRYPOINT void free_lockward (ModeInfo *mi);
/***************************************************************************
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 ();
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);
/* 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;
}
}
-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))
}
}
-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)