Fix flipBlack option XBoard with board texture
authorH.G. Muller <h.g.muller@hccnet.nl>
Sat, 26 Feb 2011 20:12:08 +0000 (21:12 +0100)
committerArun Persaud <apersaud@lbl.gov>
Sun, 27 Feb 2011 18:59:44 +0000 (10:59 -0800)
In XBoard -flipBlack is implemented by swapping white and black pieces,
because the Shogi bitmaps from XShogi are made that way. But the mask
used to cut out the whole in the board texture to fit the piece was not
swapped, both when drawing static pieces, as well as during animation.

xboard.c

index 2d3a155..73bd41c 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -4263,7 +4263,7 @@ static void colorDrawPieceImage(piece, square_color, x, y, dest)
        }
        break;
     }
        }
        break;
     }
-    if(appData.upsideDown && flipView) kind ^= 2; // swap white and black pieces
+    if(appData.upsideDown && flipView) { kind ^= 2; p += p < BlackPawn ? BlackPawn : -BlackPawn; }// swap white and black pieces
     if(useTexture & square_color+1) {
         BlankSquare(x, y, square_color, piece, dest, 1); // erase previous contents with background
        XSetClipMask(xDisplay, wlPieceGC, xpmMask[p]);
     if(useTexture & square_color+1) {
         BlankSquare(x, y, square_color, piece, dest, 1); // erase previous contents with background
        XSetClipMask(xDisplay, wlPieceGC, xpmMask[p]);
@@ -8769,6 +8769,7 @@ BeginAnimation(anim, piece, startColor, start)
 {
   Pixmap mask;
 
 {
   Pixmap mask;
 
+  if(appData.upsideDown && flipView) piece += piece < BlackPawn ? BlackPawn : -BlackPawn;
   /* The old buffer is initialised with the start square (empty) */
   BlankSquare(start->x, start->y, startColor, EmptySquare, anim->saveBuf, 0);
   anim->prevFrame = *start;
   /* The old buffer is initialised with the start square (empty) */
   BlankSquare(start->x, start->y, startColor, EmptySquare, anim->saveBuf, 0);
   anim->prevFrame = *start;