From http://www.jwz.org/xscreensaver/xscreensaver-5.39.tar.gz
[xscreensaver] / hacks / glx / cage.c
index 3590f8600f3221b80be4b302d91135d637581fb2..66f48aadc30ab57a8342ced10b64a4f7f54c7612 100644 (file)
@@ -82,9 +82,9 @@ static const char sccsid[] = "@(#)cage.c      5.01 2001/03/01 xlockmore";
                                                        "*wireframe:    False   \n"                     \
                                                        "*suppressRotationAnimation: True\n" \
 
-# define refresh_cage 0
+# define free_cage 0
 # define release_cage 0
-# define cage_handle_event 0
+# define cage_handle_event xlockmore_no_events
 # include "xlockmore.h"                /* from the xscreensaver distribution */
 #else /* !STANDALONE */
 # include "xlock.h"            /* from the xlockmore distribution */
@@ -95,8 +95,8 @@ static const char sccsid[] = "@(#)cage.c      5.01 2001/03/01 xlockmore";
 #if 0
 #include "e_textures.h"
 #else
-#include "xpm-ximage.h"
-#include "../images/wood.xpm"
+#include "ximage-loader.h"
+#include "images/gen/wood_png.h"
 #endif
 
 ENTRYPOINT ModeSpecOpt cage_opts =
@@ -296,8 +296,14 @@ reshape_cage(ModeInfo * mi, int width, int height)
 {
        cagestruct *cp = &cage[MI_SCREEN(mi)];
        int i;
+    int y = 0;
 
-       glViewport(0, 0, cp->WindW = (GLint) width, cp->WindH = (GLint) height);
+    if (width > height * 5) {   /* tiny window: show middle */
+      height = width * 9/16;
+      y = -height/2;
+    }
+
+       glViewport(0, y, cp->WindW = (GLint) width, cp->WindH = (GLint) height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0);
@@ -357,16 +363,11 @@ pinit(ModeInfo *mi)
        check_gl_error("mipmapping");
 #else
     {
-      XImage *img = xpm_to_ximage (mi->dpy,
-                                   mi->xgwa.visual,
-                                   mi->xgwa.colormap,
-                                   wood_texture);
+      XImage *img = image_data_to_ximage (mi->dpy, mi->xgwa.visual,
+                                          wood_png, sizeof(wood_png));
          glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,
                     img->width, img->height, 0,
-                    GL_RGBA,
-                    /* GL_UNSIGNED_BYTE, */
-                    GL_UNSIGNED_INT_8_8_8_8_REV,
-                    img->data);
+                    GL_RGBA, GL_UNSIGNED_BYTE, img->data);
       check_gl_error("texture");
       XDestroyImage (img);
     }
@@ -387,7 +388,7 @@ init_cage (ModeInfo * mi)
 {
        cagestruct *cp;
 
-       MI_INIT (mi, cage, NULL);
+       MI_INIT (mi, cage);
        cp = &cage[MI_SCREEN(mi)];
 
        cp->step = NRAND(90);