/* HAVE_GLUT defined if we're building a standalone glsnake,
* and not defined if we're building as an xscreensaver hack */
#ifdef HAVE_GLUT
# include <GL/glut.h>
#else
/* HAVE_GLUT defined if we're building a standalone glsnake,
* and not defined if we're building as an xscreensaver hack */
#ifdef HAVE_GLUT
# include <GL/glut.h>
#else
#define glsnake_init init_glsnake
#define glsnake_display draw_glsnake
#define glsnake_reshape reshape_glsnake
#define glsnake_init init_glsnake
#define glsnake_display draw_glsnake
#define glsnake_reshape reshape_glsnake
static XrmOptionDescRec opts[] = {
{ "-explode", ".explode", XrmoptionSepArg, DEF_EXPLODE },
static XrmOptionDescRec opts[] = {
{ "-explode", ".explode", XrmoptionSepArg, DEF_EXPLODE },
/* the id of the display lists for drawing a node */
GLuint node_solid, node_wire;
/* the id of the display lists for drawing a node */
GLuint node_solid, node_wire;
glVertex3fv(solid_prism_v[0]);
glVertex3fv(solid_prism_v[2]);
glVertex3fv(solid_prism_v[1]);
glVertex3fv(solid_prism_v[0]);
glVertex3fv(solid_prism_v[2]);
glVertex3fv(solid_prism_v[1]);
glNormal3fv(solid_prism_n[1]);
glVertex3fv(solid_prism_v[6]);
glVertex3fv(solid_prism_v[7]);
glVertex3fv(solid_prism_v[8]);
glNormal3fv(solid_prism_n[1]);
glVertex3fv(solid_prism_v[6]);
glVertex3fv(solid_prism_v[7]);
glVertex3fv(solid_prism_v[8]);
glNormal3fv(solid_prism_n[2]);
glVertex3fv(solid_prism_v[12]);
glVertex3fv(solid_prism_v[13]);
glVertex3fv(solid_prism_v[14]);
glNormal3fv(solid_prism_n[2]);
glVertex3fv(solid_prism_v[12]);
glVertex3fv(solid_prism_v[13]);
glVertex3fv(solid_prism_v[14]);
glNormal3fv(solid_prism_n[3]);
glVertex3fv(solid_prism_v[3]);
glVertex3fv(solid_prism_v[4]);
glVertex3fv(solid_prism_v[5]);
glNormal3fv(solid_prism_n[3]);
glVertex3fv(solid_prism_v[3]);
glVertex3fv(solid_prism_v[4]);
glVertex3fv(solid_prism_v[5]);
glNormal3fv(solid_prism_n[4]);
glVertex3fv(solid_prism_v[9]);
glVertex3fv(solid_prism_v[11]);
glVertex3fv(solid_prism_v[10]);
glNormal3fv(solid_prism_n[4]);
glVertex3fv(solid_prism_v[9]);
glVertex3fv(solid_prism_v[11]);
glVertex3fv(solid_prism_v[10]);
glNormal3fv(solid_prism_n[5]);
glVertex3fv(solid_prism_v[16]);
glVertex3fv(solid_prism_v[15]);
glVertex3fv(solid_prism_v[17]);
glNormal3fv(solid_prism_n[5]);
glVertex3fv(solid_prism_v[16]);
glVertex3fv(solid_prism_v[15]);
glVertex3fv(solid_prism_v[17]);
glVertex3fv(solid_prism_v[12]);
glVertex3fv(solid_prism_v[14]);
glVertex3fv(solid_prism_v[2]);
glVertex3fv(solid_prism_v[12]);
glVertex3fv(solid_prism_v[14]);
glVertex3fv(solid_prism_v[2]);
glNormal3fv(solid_prism_n[7]);
glVertex3fv(solid_prism_v[0]);
glVertex3fv(solid_prism_v[1]);
glVertex3fv(solid_prism_v[7]);
glVertex3fv(solid_prism_v[6]);
glNormal3fv(solid_prism_n[7]);
glVertex3fv(solid_prism_v[0]);
glVertex3fv(solid_prism_v[1]);
glVertex3fv(solid_prism_v[7]);
glVertex3fv(solid_prism_v[6]);
glNormal3fv(solid_prism_n[8]);
glVertex3fv(solid_prism_v[6]);
glVertex3fv(solid_prism_v[8]);
glVertex3fv(solid_prism_v[13]);
glVertex3fv(solid_prism_v[12]);
glNormal3fv(solid_prism_n[8]);
glVertex3fv(solid_prism_v[6]);
glVertex3fv(solid_prism_v[8]);
glVertex3fv(solid_prism_v[13]);
glVertex3fv(solid_prism_v[12]);
glNormal3fv(solid_prism_n[9]);
glVertex3fv(solid_prism_v[3]);
glVertex3fv(solid_prism_v[5]);
glVertex3fv(solid_prism_v[17]);
glVertex3fv(solid_prism_v[15]);
glNormal3fv(solid_prism_n[9]);
glVertex3fv(solid_prism_v[3]);
glVertex3fv(solid_prism_v[5]);
glVertex3fv(solid_prism_v[17]);
glVertex3fv(solid_prism_v[15]);
glNormal3fv(solid_prism_n[10]);
glVertex3fv(solid_prism_v[3]);
glVertex3fv(solid_prism_v[9]);
glVertex3fv(solid_prism_v[10]);
glVertex3fv(solid_prism_v[4]);
glNormal3fv(solid_prism_n[10]);
glVertex3fv(solid_prism_v[3]);
glVertex3fv(solid_prism_v[9]);
glVertex3fv(solid_prism_v[10]);
glVertex3fv(solid_prism_v[4]);
glNormal3fv(solid_prism_n[11]);
glVertex3fv(solid_prism_v[15]);
glVertex3fv(solid_prism_v[16]);
glVertex3fv(solid_prism_v[11]);
glVertex3fv(solid_prism_v[9]);
glNormal3fv(solid_prism_n[11]);
glVertex3fv(solid_prism_v[15]);
glVertex3fv(solid_prism_v[16]);
glVertex3fv(solid_prism_v[11]);
glVertex3fv(solid_prism_v[9]);
glNormal3fv(solid_prism_n[12]);
glVertex3fv(solid_prism_v[1]);
glVertex3fv(solid_prism_v[2]);
glVertex3fv(solid_prism_v[5]);
glVertex3fv(solid_prism_v[4]);
glNormal3fv(solid_prism_n[12]);
glVertex3fv(solid_prism_v[1]);
glVertex3fv(solid_prism_v[2]);
glVertex3fv(solid_prism_v[5]);
glVertex3fv(solid_prism_v[4]);
glNormal3fv(solid_prism_n[13]);
glVertex3fv(solid_prism_v[8]);
glVertex3fv(solid_prism_v[7]);
glVertex3fv(solid_prism_v[10]);
glVertex3fv(solid_prism_v[11]);
glNormal3fv(solid_prism_n[13]);
glVertex3fv(solid_prism_v[8]);
glVertex3fv(solid_prism_v[7]);
glVertex3fv(solid_prism_v[10]);
glVertex3fv(solid_prism_v[11]);
glNormal3fv(solid_prism_n[14]);
glVertex3fv(solid_prism_v[13]);
glVertex3fv(solid_prism_v[16]);
glVertex3fv(solid_prism_v[17]);
glVertex3fv(solid_prism_v[14]);
glNormal3fv(solid_prism_n[14]);
glVertex3fv(solid_prism_v[13]);
glVertex3fv(solid_prism_v[16]);
glVertex3fv(solid_prism_v[17]);
glVertex3fv(solid_prism_v[14]);
glVertex3fv(solid_prism_v[0]);
glVertex3fv(solid_prism_v[6]);
glVertex3fv(solid_prism_v[12]);
glVertex3fv(solid_prism_v[0]);
glVertex3fv(solid_prism_v[6]);
glVertex3fv(solid_prism_v[12]);
glNormal3fv(solid_prism_n[19]);
glVertex3fv(solid_prism_v[3]);
glVertex3fv(solid_prism_v[15]);
glVertex3fv(solid_prism_v[9]);
glNormal3fv(solid_prism_n[19]);
glVertex3fv(solid_prism_v[3]);
glVertex3fv(solid_prism_v[15]);
glVertex3fv(solid_prism_v[9]);
glVertex3fv(solid_prism_v[4]);
glVertex3fv(solid_prism_v[10]);
glVertex3fv(solid_prism_v[7]);
glVertex3fv(solid_prism_v[4]);
glVertex3fv(solid_prism_v[10]);
glVertex3fv(solid_prism_v[7]);
glNormal3fv(solid_prism_n[17]);
glVertex3fv(solid_prism_v[8]);
glVertex3fv(solid_prism_v[11]);
glVertex3fv(solid_prism_v[16]);
glVertex3fv(solid_prism_v[13]);
glNormal3fv(solid_prism_n[17]);
glVertex3fv(solid_prism_v[8]);
glVertex3fv(solid_prism_v[11]);
glVertex3fv(solid_prism_v[16]);
glVertex3fv(solid_prism_v[13]);
glNormal3fv(solid_prism_n[18]);
glVertex3fv(solid_prism_v[2]);
glVertex3fv(solid_prism_v[14]);
glVertex3fv(solid_prism_v[17]);
glVertex3fv(solid_prism_v[5]);
glNormal3fv(solid_prism_n[18]);
glVertex3fv(solid_prism_v[2]);
glVertex3fv(solid_prism_v[14]);
glVertex3fv(solid_prism_v[17]);
glVertex3fv(solid_prism_v[5]);
- gluOrtho2D((GLdouble) 0., (GLdouble) bp->width, (GLdouble) 0., (GLdouble) bp->height);
+ glOrtho((GLdouble) 0., (GLdouble) bp->width, (GLdouble) 0., (GLdouble) bp->height, -1, 1);
- gluOrtho2D((GLdouble) 0., (GLdouble) mi->xgwa.width, (GLdouble) 0., (GLdouble) mi->xgwa.height);
+ glOrtho((GLdouble) 0., (GLdouble) mi->xgwa.width, (GLdouble) 0., (GLdouble) mi->xgwa.height, -1, 1);
#endif
glColor4f(1.0, 1.0, 1.0, 1.0);
#endif
glColor4f(1.0, 1.0, 1.0, 1.0);
- print_gl_string(mi->dpy, bp->font, bp->font_list,
- mi->xgwa.width, mi->xgwa.height,
- 10.0, (float) mi->xgwa.height - 10.0,
- s);
+ print_texture_label (mi->dpy, bp->font_data,
+ mi->xgwa.width, mi->xgwa.height,
+ 1, s);
- glViewport(0, 0, (GLint) w, (GLint) h);
+ double h = (GLfloat) height / (GLfloat) width;
+ int y = 0;
+
+ if (width > height * 5) { /* tiny window: show middle */
+ height = width;
+ y = -height/2;
+ h = height / (GLfloat) width;
+ }
+
+ glViewport(0, y, width, height);
- gluPerspective(zoom, (GLdouble) w / (GLdouble) h, 1.0, 100.0);
+ gluPerspective(zoom, 1/h, 1.0, 100.0);
gluLookAt(0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
/*gluLookAt(0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);*/
glLoadIdentity();
#ifdef HAVE_GLUT
gluLookAt(0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
/*gluLookAt(0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);*/
glLoadIdentity();
#ifdef HAVE_GLUT
glRotatef(yspin, 0.0, 1.0, 0.0);
glRotatef(zspin, 0.0, 0.0, 1.0);
glRotatef(yspin, 0.0, 1.0, 0.0);
glRotatef(zspin, 0.0, 0.0, 1.0);
+# ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */
+ {
+ GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi);
+ int o = (int) current_device_rotation();
+ if (o != 0 && o != 180 && o != -180)
+ glScalef (1/h, 1/h, 1/h);
+ }
+# endif
+
for (i = 0; i < NODE_COUNT; i++) {
/* choose a colour for this node */
if ((i == bp->selected || i == bp->selected+1) && interactive)
for (i = 0; i < NODE_COUNT; i++) {
/* choose a colour for this node */
if ((i == bp->selected || i == bp->selected+1) && interactive)