From 18247c0019bd4b13e64fd8d406f304306b74fdad Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Fri, 5 Oct 2012 15:40:14 +0200 Subject: [PATCH] Also use cairo on slave board With dual-board observing the drawing should be redirected to the slave board, so SwitchWindow should also switch the xlib-surface to one for the slave window. --- xboard.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/xboard.c b/xboard.c index 801f9a9..6d8f18c 100644 --- a/xboard.c +++ b/xboard.c @@ -341,7 +341,7 @@ WindowPlacement wpTags; #define SOLID 0 #define OUTLINE 1 Boolean cairoAnimate; -static cairo_surface_t *csBoardWindow, *csBoardBackup; +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 -- 1.7.0.4