Fix DrawSeekText
[xboard.git] / xboard.c
index a33b765..8371562 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -340,8 +340,8 @@ WindowPlacement wpTags;
 
 #define SOLID 0
 #define OUTLINE 1
-Boolean cairoAnimate = True;
-static cairo_surface_t *csBoardWindow, *csBoardBackup;
+Boolean cairoAnimate;
+static cairo_surface_t *csBoardWindow, *csBoardBackup, *csDualBoard;
 static cairo_surface_t *pngPieceBitmaps[2][(int)BlackPawn];    // scaled pieces as used
 static cairo_surface_t *pngPieceBitmaps2[2][(int)BlackPawn+4]; // scaled pieces in store
 static cairo_surface_t *pngBoardBitmap[2];
@@ -894,9 +894,16 @@ SwitchWindow ()
     extern Option dualOptions[];
     static Window dual;
     Window tmp = xBoardWindow;
+    cairo_surface_t *cstmp = csBoardWindow;
     if(!dual) dual = XtWindow(dualOptions[3].handle); // must be first call
     xBoardWindow = dual; // swap them
     dual = tmp;
+    csBoardWindow = csDualBoard;
+    if(!csDualBoard && cstmp) {
+       int boardWidth = lineGap + BOARD_WIDTH * (squareSize + lineGap);
+       int boardHeight = lineGap + BOARD_HEIGHT * (squareSize + lineGap);
+       csBoardWindow = cairo_xlib_surface_create(xDisplay, xBoardWindow, DefaultVisual(xDisplay, 0), boardWidth, boardHeight);
+    }
 }
 
 void
@@ -933,7 +940,8 @@ NewSurfaces ()
     // delete surfaces after size becomes invalid, so they will be recreated
     if(csBoardWindow) cairo_surface_destroy(csBoardWindow);
     if(csBoardBackup) cairo_surface_destroy(csBoardBackup);
-    csBoardWindow = csBoardBackup = NULL;
+    if(csDualBoard) cairo_surface_destroy(csDualBoard);
+    csBoardWindow = csBoardBackup = csDualBoard = NULL;
 }
 
 #define BoardSize int
@@ -1533,6 +1541,11 @@ XBoard square size (hint): %d\n\
     /*
      * Inhibit shell resizing.
      */
+
+    CreateAnyPieces();
+    cairoAnimate = *appData.pngDirectory && useTexture == 3
+       && strstr(appData.liteBackTextureFile, ".png") && strstr(appData.darkBackTextureFile, ".png");
+
     shellArgs[0].value = (XtArgVal) &w;
     shellArgs[1].value = (XtArgVal) &h;
     XtGetValues(shellWidget, shellArgs, 2);
@@ -1546,7 +1559,6 @@ XBoard square size (hint): %d\n\
 
     CreateGCs(False);
     CreateGrid();
-    CreateAnyPieces();
 
     if(appData.logoSize)
     {   // locate and read user logo
@@ -2846,6 +2858,22 @@ DrawOneSquare (int x, int y, ChessSquare piece, int square_color, int marker, ch
        if (appData.monoMode) {
            XDrawImageString(xDisplay, xBoardWindow, hGC, xx, yy, string, 1);
        } else {
+           if(*appData.pngDirectory) {
+               cairo_t *cr = cairo_create (csBoardWindow);
+               cairo_select_font_face (cr, "Sans",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_BOLD);
+
+               cairo_set_font_size (cr, squareSize/4);
+
+               cairo_move_to (cr, xx-1, yy);
+               if(align < 3) cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
+               else          cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+               cairo_show_text (cr, string);
+
+               /* free memory */
+               cairo_destroy (cr);
+           } else
            XDrawString(xDisplay, xBoardWindow, hGC, xx, yy, string, 1);
        }
     }
@@ -3026,10 +3054,8 @@ void DrawSeekText(char *buf, int x, int y)
     cairo_set_font_size (cr, 12.0);
 
     cairo_move_to (cr, x, y+4);
-    cairo_show_text( cr, buf);
-
     cairo_set_source_rgba(cr, 0, 0, 0,1.0);
-    cairo_stroke(cr);
+    cairo_show_text( cr, buf);
 
     /* free memory */
     cairo_destroy (cr);