Fix exposure of atomic captures
[xboard.git] / draw.c
diff --git a/draw.c b/draw.c
index ab9b693..5af4918 100644 (file)
--- a/draw.c
+++ b/draw.c
@@ -502,6 +502,7 @@ DrawGrid()
 {
   /* draws a grid starting around Nx, Ny squares starting at x,y */
   int i;
+  float odd = (lineGap & 1)/2.;
   cairo_t *cr;
 
   /* get a cairo_t */
@@ -513,8 +514,8 @@ DrawGrid()
   /* lines in X */
   for (i = 0; i < BOARD_WIDTH + BOARD_HEIGHT + 2; i++)
     {
-      cairo_move_to (cr, gridSegments[i].x1, gridSegments[i].y1);
-      cairo_line_to (cr, gridSegments[i].x2, gridSegments[i].y2);
+      cairo_move_to (cr, gridSegments[i].x1 + odd, gridSegments[i].y1 + odd);
+      cairo_line_to (cr, gridSegments[i].x2 + odd, gridSegments[i].y2 + odd);
       cairo_stroke (cr);
     }
 
@@ -525,7 +526,7 @@ DrawGrid()
 }
 
 void
-DrawBorder (int x, int y, int type)
+DrawBorder (int x, int y, int type, int odd)
 {
     cairo_t *cr;
     char *col;
@@ -537,11 +538,11 @@ DrawBorder (int x, int y, int type)
     }
     cr = cairo_create(csBoardWindow);
     cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
-    cairo_rectangle(cr, x, y, squareSize+lineGap, squareSize+lineGap);
+    cairo_rectangle(cr, x+odd/2., y+odd/2., squareSize+lineGap, squareSize+lineGap);
     SetPen(cr, lineGap, col, 0);
     cairo_stroke(cr);
     cairo_destroy(cr);
-    GraphExpose(currBoard, x - lineGap/2, y - lineGap/2, squareSize+2*lineGap, squareSize+2*lineGap);
+    GraphExpose(currBoard, x - lineGap/2, y - lineGap/2, squareSize+2*lineGap+odd, squareSize+2*lineGap+odd);
 }
 
 static int
@@ -604,7 +605,8 @@ BlankSquare (cairo_surface_t *dest, int x, int y, int color, ChessSquare piece,
          case 2: col = "#000000"; break;
        }
        SetPen(cr, 2.0, col, 0);
-       cairo_rectangle (cr, x, y, squareSize, squareSize);
+       cairo_rectangle (cr, fac*x, fac*y, squareSize, squareSize);
+       cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
        cairo_fill (cr);
        cairo_destroy (cr);
     }
@@ -653,6 +655,7 @@ void
 DrawDot (int marker, int x, int y, int r)
 { // used for atomic captures; no need to draw on backup
   DoDrawDot(csBoardWindow, marker, x, y, r);
+  GraphExpose(currBoard, x-r, y-r, 2*r, 2*r);
 }
 
 void