Make square-size rounding dependent on fairy pieces (WB)
authorH.G.Muller <hgm@hgm-xboard.(none)>
Sat, 6 Jul 2019 14:03:43 +0000 (16:03 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Sat, 6 Jul 2019 14:03:43 +0000 (16:03 +0200)
WinBoard 'rounds' the square size to one of the three values for which
images of fairy pieces are built in, in variants that normally would
contain such pieces. But when used as parent of an engine-defined variant
they might actually not contain any fairy pieces at all. This situation
is now recognized for parent variant fairy, and would suppress the rounding
when it occurs.

winboard/winboard.c

index ac5fc03..1302c8c 100644 (file)
@@ -2068,6 +2068,7 @@ static int TranslatePieceToFontPiece( int piece )
     case WhiteSilver:\r
         return PM_WSG;\r
     case WhiteLance:\r
+\r
         return PM_WL;\r
     case WhiteFalcon:\r
         return PM_WV;\r
@@ -2370,12 +2371,15 @@ InitDrawingSizes(BoardSize boardSize, int flags)
 \r
   if(boardSize != SizeMiddling && boardSize != SizePetite && boardSize != SizeBulky && !appData.useFont)\r
   { // correct board size to one where built-in pieces exist\r
+    int fairies = 0;\r
+    for(i=WhiteQueen+1; i<WhiteKing; i++) fairies += (PieceToChar(i) != '.' || PieceToChar(WHITE_TO_BLACK i) != '.');\r
     if((v == VariantCapablanca || v == VariantGothic || v == VariantGrand || v == VariantCapaRandom || v == VariantJanus || v == VariantSuper)\r
        && (boardSize < SizePetite || boardSize > SizeBulky) // Archbishop and Chancellor available in entire middle range\r
 \r
       || (v == VariantShogi && boardSize != SizeModerate)   // Japanese-style Shogi\r
       ||  v == VariantKnightmate || v == VariantSChess || v == VariantXiangqi || v == VariantSpartan\r
-      ||  v == VariantShatranj || v == VariantMakruk || v == VariantGreat || v == VariantFairy || v == VariantLion ) {\r
+      ||  v == VariantShatranj || v == VariantMakruk || v == VariantGreat|| v == VariantLion ||\r
+          v == VariantFairy && fairies ) {\r
       if(boardSize < SizeMediocre) boardSize = SizePetite; else\r
       if(boardSize > SizeModerate) boardSize = SizeBulky;  else\r
                                    boardSize = SizeMiddling;\r
@@ -5353,6 +5357,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       break;\r
 \r
 \r
+\r
     case IDM_ToStart:\r
       ToStartEvent();\r
       SetFocus(hwndMain);\r
@@ -8764,6 +8769,7 @@ GLT_GetFromList( int index, char *name )
            if( SendDlgItemMessage( gameListOptionsDialog, IDC_GameListTags, LB_GETTEXT, index, (LPARAM) name ) != LB_ERR )\r
                return TRUE;\r
     }\r
+\r
     return FALSE;\r
 }\r
 \r