From http://www.jwz.org/xscreensaver/xscreensaver-5.16.tar.gz
[xscreensaver] / hacks / glx / endgame.c
index 857183bfb69f5b4ce56abae7eb8a87c5e69d3c41..eabc91c81d0f3ad2a5e382014be667d69997bec2 100644 (file)
 #undef countof
 #define countof(x) (sizeof((x))/sizeof((*x)))
 
+#define DEF_ROTATE      "True"
+#define DEF_REFLECTIONS "True"
+#define DEF_SHADOWS     "True"
+#define DEF_SMOOTH      "True"
+#define DEF_CLASSIC     "False"
+
+
 static XrmOptionDescRec opts[] = {
   {"+rotate", ".chess.rotate", XrmoptionNoArg, "false" },
   {"-rotate", ".chess.rotate", XrmoptionNoArg, "true" },
@@ -55,11 +62,11 @@ static XrmOptionDescRec opts[] = {
 static int rotate, reflections, smooth, shadows, classic;
 
 static argtype vars[] = {
-  {&rotate,      "rotate",      "Rotate",      "True", t_Bool},
-  {&reflections, "reflections", "Reflections", "True", t_Bool},
-  {&shadows, "shadows", "Shadows", "True", t_Bool},
-  {&smooth,      "smooth",      "Smooth",      "True", t_Bool},
-  {&classic,     "classic",     "Classic",     "False", t_Bool},
+  {&rotate,      "rotate",      "Rotate",      DEF_ROTATE, t_Bool},
+  {&reflections, "reflections", "Reflections", DEF_REFLECTIONS, t_Bool},
+  {&shadows,    "shadows",      "Shadows",    DEF_SHADOWS, t_Bool},
+  {&smooth,      "smooth",      "Smooth",      DEF_SMOOTH, t_Bool},
+  {&classic,     "classic",     "Classic",     DEF_CLASSIC, t_Bool},
 };
 
 ENTRYPOINT ModeSpecOpt chess_opts = {countof(opts), opts, countof(vars), vars, NULL};
@@ -302,6 +309,8 @@ static void drawMovingPiece(ModeInfo *mi, Chesscreen *cs, int shadow)
 {
   int piece = cs->mpiece % PIECES;
 
+  if (piece == NONE) return;
+
   glPushMatrix();
 
   if(shadow) glColor4fv(MaterialShadow);
@@ -625,11 +634,15 @@ static void display(ModeInfo *mi, Chesscreen *cs)
 
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
+  glRotatef(current_device_rotation(), 0, 0, 1);
 
   /** setup perspectiv */
   glTranslatef(0.0, 0.0, -1.5*BOARDSIZE);
   glRotatef(30.0, 1.0, 0.0, 0.0);
+  glRotatef(-current_device_rotation(), 0, 0, 1);
   gltrackball_rotate (cs->trackball);
+  glRotatef(current_device_rotation(), 0, 0, 1);
+
   glRotatef(cs->theta*100, 0.0, 1.0, 0.0);
   glTranslatef(-0.5*BOARDSIZE, 0.0, -0.5*BOARDSIZE);
 
@@ -777,8 +790,6 @@ ENTRYPOINT void init_chess(ModeInfo *mi)
   else
     MI_CLEARWINDOW(mi);
 
-  glClearColor(0.0, 0.0, 0.0, 0.0);
-
   if (!cs->wire) {
     glDepthFunc(GL_LEQUAL);
     glClearStencil(0);