int x1, x2, y1, y2;
} gridSegments[BOARD_RANKS + BOARD_FILES + 2];
-static int dual = 0;
-
void
-SwitchWindow ()
+SwitchWindow (int main)
{
- dual = !dual;
- currBoard = (dual ? &mainOptions[W_BOARD] : &dualOptions[3]);
+ currBoard = (main ? &mainOptions[W_BOARD] : &dualOptions[3]);
csBoardWindow = DRAWABLE(currBoard);
}
int boardWidth, boardHeight;
static int oldWidth, oldHeight;
static VariantClass oldVariant;
- static int oldMono = -1, oldTwoBoards = 0;
+ static int oldTwoBoards = 0;
if(!mainOptions[W_BOARD].handle) return;
SelectPieces(gameInfo.variant);
- oldMono = -10; // kludge to force recreation of animation masks
oldVariant = gameInfo.variant;
}
CreateAnimVars();
- oldMono = appData.monoMode;
}
void
case 0: col = "#000000"; break;
case 1: col = appData.highlightSquareColor; break;
case 2: col = appData.premoveHighlightColor; break;
+ default: col = "#808080"; break; // cannot happen
}
cr = cairo_create(csBoardWindow);
cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
cairo_fill (cr);
cairo_destroy (cr);
} else { // evenly colored squares
- char *col;
+ char *col = NULL;
switch (color) {
case 0: col = appData.darkSquareColor; break;
case 1: col = appData.lightSquareColor; break;
case 2: col = "#000000"; break;
+ default: col = "#808080"; break; // cannot happen
}
SetPen(cr, 2.0, col, 0);
cairo_rectangle (cr, fac*x, fac*y, squareSize, squareSize);
static void
pngDrawPiece (cairo_surface_t *dest, ChessSquare piece, int square_color, int x, int y)
{
- int kind, p = piece;
+ int kind;
cairo_t *cr;
if ((int)piece < (int) BlackPawn) {
kind = 1;
piece -= BlackPawn;
}
- if(appData.upsideDown && flipView) { p += p < BlackPawn ? BlackPawn : -BlackPawn; }// swap white and black pieces
+ if(appData.upsideDown && flipView) kind = 1 - kind; // swap white and black pieces
BlankSquare(dest, x, y, square_color, piece, 1); // erase previous contents with background
cr = cairo_create (dest);
cairo_set_source_surface (cr, pngPieceBitmaps[kind][piece], x, y);
GraphExpose(currBoard, x-r, y-r, 2*r, 2*r);
}
-void
-DrawOneSquare (int x, int y, ChessSquare piece, int square_color, int marker, char *string, int align)
-{ // basic front-end board-draw function: takes care of everything that can be in square:
- // piece, background, coordinate/count, marker dot
- cairo_t *cr;
-
- if (piece == EmptySquare) {
- BlankSquare(csBoardWindow, x, y, square_color, piece, 1);
- } else {
- pngDrawPiece(csBoardWindow, piece, square_color, x, y);
- }
-
- if(align) { // square carries inscription (coord or piece count)
+static void
+DrawText (char *string, int x, int y, int align)
+{
int xx = x, yy = y;
cairo_text_extents_t te;
+ cairo_t *cr;
cr = cairo_create (csBoardWindow);
cairo_select_font_face (cr, "Sans",
else cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
cairo_show_text (cr, string);
cairo_destroy (cr);
+}
+
+void
+DrawOneSquare (int x, int y, ChessSquare piece, int square_color, int marker, char *tString, char *bString, int align)
+{ // basic front-end board-draw function: takes care of everything that can be in square:
+ // piece, background, coordinate/count, marker dot
+
+ if (piece == EmptySquare) {
+ BlankSquare(csBoardWindow, x, y, square_color, piece, 1);
+ } else {
+ pngDrawPiece(csBoardWindow, piece, square_color, x, y);
+ }
+
+ if(align) { // square carries inscription (coord or piece count)
+ if(align > 1) DrawText(tString, x, y, align); // top (rank or count)
+ if(bString && *bString) DrawText(bString, x, y, 1); // bottom (always lower right file ID)
}
if(marker) { // print fat marker dot, if requested