X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=draw.c;h=757185099605e114a3953d1cd295cab5df83a3ed;hb=67b3a0d7c465522feb67841c7374bf863df19357;hp=20553e258bd8ba3521ac0ae6b16a8066a4919f7f;hpb=8c8feabe34a974805b243ca3c9268e3ec296d6cb;p=xboard.git diff --git a/draw.c b/draw.c index 20553e2..7571850 100644 --- a/draw.c +++ b/draw.c @@ -110,7 +110,9 @@ extern char *getenv(); #define SOLID 0 #define OUTLINE 1 Boolean cairoAnimate; -static cairo_surface_t *csBoardWindow, *csBoardBackup, *csDualBoard; +Option *currBoard; +static cairo_surface_t *csBoardWindow; +static cairo_surface_t *pngPieceImages[2][(int)BlackPawn+4]; // png 256 x 256 images 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]; @@ -130,24 +132,9 @@ static int dual = 0; void SwitchWindow () { - cairo_surface_t *cstmp = csBoardWindow; - csBoardWindow = csDualBoard; dual = !dual; - if(!csDualBoard) { - csBoardWindow = GetOutputSurface(&dualOptions[3], 0, 0); - dual = 1; - } - csDualBoard = cstmp; -} - -void -NewSurfaces () -{ - // delete surfaces after size becomes invalid, so they will be recreated - if(csBoardWindow) cairo_surface_destroy(csBoardWindow); - if(csBoardBackup) cairo_surface_destroy(csBoardBackup); - if(csDualBoard) cairo_surface_destroy(csDualBoard); - csBoardWindow = csBoardBackup = csDualBoard = NULL; + currBoard = (dual ? &mainOptions[W_BOARD] : &dualOptions[3]); + csBoardWindow = DRAWABLE(currBoard); } #define BoardSize int @@ -174,7 +161,6 @@ InitDrawingSizes (BoardSize boardSize, int flags) oldWidth = boardWidth; oldHeight = boardHeight; CreateGrid(); - NewSurfaces(); /* * Inhibit shell resizing. @@ -277,7 +263,6 @@ ScaleOnePiece (char *name, int color, int piece) char buf[MSG_SIZ]; cairo_surface_t *img, *cs; cairo_t *cr; - static cairo_surface_t *pngPieceImages[2][(int)BlackPawn+4]; // png 256 x 256 images if((img = pngPieceImages[color][piece]) == NULL) { // if PNG file for this piece was not yet read, read it now and store it if(!*appData.pngDirectory) img = ConvertPixmap(color, piece); else { @@ -339,9 +324,15 @@ CreateAnyPieces () } void -InitDrawingParams () +InitDrawingParams (int reloadPieces) { + int i, p; MakeColors(); + if(reloadPieces) + for(i=0; i<2; i++) for(p=0; p