X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=board.c;h=a0aa2fc79e54caf0b04df061c6033b7950c9b784;hb=3a75b74c7fc03b543993c90f4a9ebdea9f03b759;hp=8b266a28864a9a3eea851ac2a1a4da7a9f35dfdd;hpb=832f0f2bbec7f461722cbe070e2ccfda65670d56;p=xboard.git diff --git a/board.c b/board.c index 8b266a2..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