# define DEFAULTS "*delay: 20000 \n" \
"*showFPS: False \n"
-# define refresh_stairs 0
# define release_stairs 0
# include "xlockmore.h" /* from the xscreensaver distribution */
#else /* !STANDALONE */
#ifdef USE_MODULES
ModStruct stairs_description =
{"stairs", "init_stairs", "draw_stairs", NULL,
- "draw_stairs", "change_stairs", NULL, &stairs_opts,
+ "draw_stairs", "change_stairs", "free_stairs", &stairs_opts,
1000, 1, 1, 1, 4, 1.0, "",
"Shows Infinite Stairs, an Escher-like scene", 0, NULL};
reshape_stairs (ModeInfo * mi, int width, int height)
{
stairsstruct *sp = &stairs[MI_SCREEN(mi)];
+ int y = 0;
- glViewport(0, 0, sp->WindW = (GLint) width, sp->WindH = (GLint) height);
+ if (width > height * 5) { /* tiny window: show middle */
+ height = width;
+ y = -height/2;
+ }
+
+ glViewport(0, y, sp->WindW = (GLint) width, sp->WindH = (GLint) height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular);
}
-static void free_stairs (ModeInfo * mi);
-
ENTRYPOINT void
init_stairs (ModeInfo * mi)
{
int screen = MI_SCREEN(mi);
stairsstruct *sp;
- MI_INIT (mi, stairs, free_stairs);
+ MI_INIT (mi, stairs);
sp = &stairs[screen];
sp->step = 0.0;
}
#endif /* !STANDALONE */
-static void
+ENTRYPOINT void
free_stairs (ModeInfo * mi)
{
stairsstruct *sp = &stairs[MI_SCREEN(mi)];