projects
/
xscreensaver
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
From http://www.jwz.org/xscreensaver/xscreensaver-5.38.tar.gz
[xscreensaver]
/
hacks
/
glx
/
stairs.c
diff --git
a/hacks/glx/stairs.c
b/hacks/glx/stairs.c
index 7fabea1ad32f61af464600e32f1879f7215fd976..49a1542fc81509a26867916824757714ea846c0d 100644
(file)
--- a/
hacks/glx/stairs.c
+++ b/
hacks/glx/stairs.c
@@
-59,7
+59,7
@@
static const char sccsid[] = "@(#)stairs.c 4.07 97/11/24 xlockmore";
# define DEFAULTS "*delay: 20000 \n" \
"*showFPS: False \n"
# define DEFAULTS "*delay: 20000 \n" \
"*showFPS: False \n"
-# define re
fresh
_stairs 0
+# define re
lease
_stairs 0
# include "xlockmore.h" /* from the xscreensaver distribution */
#else /* !STANDALONE */
# include "xlock.h" /* from the xlockmore distribution */
# include "xlockmore.h" /* from the xscreensaver distribution */
#else /* !STANDALONE */
# include "xlock.h" /* from the xlockmore distribution */
@@
-83,8
+83,8
@@
ENTRYPOINT ModeSpecOpt stairs_opts =
#ifdef USE_MODULES
ModStruct stairs_description =
#ifdef USE_MODULES
ModStruct stairs_description =
-{"stairs", "init_stairs", "draw_stairs",
"release_stairs"
,
- "draw_stairs", "change_stairs",
NULL
, &stairs_opts,
+{"stairs", "init_stairs", "draw_stairs",
NULL
,
+ "draw_stairs", "change_stairs",
"free_stairs"
, &stairs_opts,
1000, 1, 1, 1, 4, 1.0, "",
"Shows Infinite Stairs, an Escher-like scene", 0, NULL};
1000, 1, 1, 1, 4, 1.0, "",
"Shows Infinite Stairs, an Escher-like scene", 0, NULL};
@@
-320,8
+320,14
@@
ENTRYPOINT void
reshape_stairs (ModeInfo * mi, int width, int height)
{
stairsstruct *sp = &stairs[MI_SCREEN(mi)];
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);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0);
@@
-354,7
+360,7
@@
stairs_handle_event (ModeInfo *mi, XEvent *event)
XLookupString (&event->xkey, &c, 1, &keysym, 0);
if (c == ' ' || c == '\t')
{
XLookupString (&event->xkey, &c, 1, &keysym, 0);
if (c == ' ' || c == '\t')
{
- gltrackball_reset (sp->trackball);
+ gltrackball_reset (sp->trackball
, 0, 0
);
return True;
}
}
return True;
}
}
@@
-437,11
+443,7
@@
init_stairs (ModeInfo * mi)
int screen = MI_SCREEN(mi);
stairsstruct *sp;
int screen = MI_SCREEN(mi);
stairsstruct *sp;
- if (stairs == NULL) {
- if ((stairs = (stairsstruct *) calloc(MI_NUM_SCREENS(mi),
- sizeof (stairsstruct))) == NULL)
- return;
- }
+ MI_INIT (mi, stairs);
sp = &stairs[screen];
sp->step = 0.0;
sp = &stairs[screen];
sp->step = 0.0;
@@
-482,12
+484,6
@@
draw_stairs (ModeInfo * mi)
glPushMatrix();
glRotatef(rot, 0, 0, 1);
glPushMatrix();
glRotatef(rot, 0, 0, 1);
- if ((rot > 45 && rot < 135) ||
- (rot < -45 && rot > -135))
- {
- GLfloat s = MI_WIDTH(mi) / (GLfloat) MI_HEIGHT(mi);
- glScalef (s, 1/s, 1);
- }
glTranslatef(0.0, 0.0, -10.0);
glTranslatef(0.0, 0.0, -10.0);
@@
-497,6
+493,14
@@
draw_stairs (ModeInfo * mi)
glScalef(Scale4Iconic * sp->WindH / sp->WindW, Scale4Iconic, Scale4Iconic);
}
glScalef(Scale4Iconic * sp->WindH / sp->WindW, Scale4Iconic, Scale4Iconic);
}
+# ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */
+ {
+ GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi);
+ if (rot != 0 && rot != 180 && rot != -180)
+ glScalef (1/h, 1/h, 1/h);
+ }
+# endif
+
gltrackball_rotate (sp->trackball);
glTranslatef(0, 0.5, 0);
gltrackball_rotate (sp->trackball);
glTranslatef(0, 0.5, 0);
@@
-577,20
+581,12
@@
change_stairs (ModeInfo * mi)
#endif /* !STANDALONE */
ENTRYPOINT void
#endif /* !STANDALONE */
ENTRYPOINT void
-
releas
e_stairs (ModeInfo * mi)
+
fre
e_stairs (ModeInfo * mi)
{
{
- if (stairs != NULL) {
- int i;
- for (i = 0; i < MI_NUM_SCREENS(mi); i++) {
- stairsstruct *sp = &stairs[i];
- if (glIsList(sp->objects)) {
- glDeleteLists(sp->objects, 1);
- }
- }
- free(stairs);
- stairs = NULL;
+ stairsstruct *sp = &stairs[MI_SCREEN(mi)];
+ if (glIsList(sp->objects)) {
+ glDeleteLists(sp->objects, 1);
}
}
- FreeAllGL(mi);
}
XSCREENSAVER_MODULE ("Stairs", stairs)
}
XSCREENSAVER_MODULE ("Stairs", stairs)