X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=board.c;h=a0aa2fc79e54caf0b04df061c6033b7950c9b784;hb=50ffaff1de1b05f1bf76dd842e734eff2974afd4;hp=96cbd7b8b5a061c3cddf991441c7dc60451042a9;hpb=18f63518ed5d7c91bcaf737924e6ccf31ad3e0d4;p=xboard.git diff --git a/board.c b/board.c index 96cbd7b..a0aa2fc 100644 --- a/board.c +++ b/board.c @@ -96,6 +96,7 @@ extern char *getenv(); #include "common.h" #include "frontend.h" #include "backend.h" +#include "xboard2.h" #include "moves.h" #include "board.h" #include "draw.h" @@ -478,12 +479,12 @@ AnimationFrame (AnimNr anr, Pnt *frame, ChessSquare piece) MyRectangle updates[4]; MyRectangle overlap; Pnt pt; - int count, i; AnimState *anim = &anims[anr]; + int count, i, x, y, w, h; /* Save what we are about to draw into the new buffer */ CopyRectangle(anr, DISP, 0, - frame->x, frame->y, squareSize, squareSize, + x = frame->x, y = frame->y, w = squareSize, h = squareSize, 0, 0); /* Erase bits of the previous frame */ @@ -502,11 +503,17 @@ AnimationFrame (AnimNr anr, Pnt *frame, ChessSquare piece) updates[i].y - anim->prevFrame.y, updates[i].width, updates[i].height, updates[i].x, updates[i].y); + /* [HGM] correct expose rectangle to encompass both overlapping squares */ + if(x > anim->prevFrame.x) w += x - anim->prevFrame.x, x = anim->prevFrame.x; + else w += anim->prevFrame.x - x; + if(y > anim->prevFrame.y) h += y - anim->prevFrame.y, y = anim->prevFrame.y; + else h += anim->prevFrame.y - y; } else { /* Easy when no overlap */ CopyRectangle(anr, 2, DISP, 0, 0, squareSize, squareSize, anim->prevFrame.x, anim->prevFrame.y); + GraphExpose(currBoard, anim->prevFrame.x, anim->prevFrame.y, squareSize, squareSize); } /* Save this frame for next time round */ @@ -521,6 +528,7 @@ AnimationFrame (AnimNr anr, Pnt *frame, ChessSquare piece) CopyRectangle(anr, 0, DISP, 0, 0, squareSize, squareSize, frame->x, frame->y); + GraphExpose(currBoard, x, y, w, h); } static void @@ -582,6 +590,7 @@ AnimateAtomicCapture (Board board, int fromX, int fromY, int toX, int toY) FrameDelay(appData.animSpeed); } board[fromY][toY] = piece; + DrawGrid(); } /* Main control logic for deciding what to animate and how */ @@ -639,11 +648,11 @@ AnimateMove (Board board, int fromX, int fromY, int toX, int toY) if(Explode(board, fromX, fromY, toX, toY)) { // mark as damaged int i,j; for(i=0; i