Apply fonts in 'other windows' after sizing
[xboard.git] / gtk / xboard.c
index df1f18e..ad3cd5a 100644 (file)
@@ -256,7 +256,7 @@ GtkAccelGroup *GtkAccelerators;
 typedef unsigned int BoardSize;
 BoardSize boardSize;
 Boolean chessProgram;
-static int initialSquareSize;
+int initialSquareSize;
 
 int  minX, minY; // [HGM] placement: volatile limits on upper-left corner
 int smallLayout = 0, tinyLayout = 0,
@@ -381,7 +381,6 @@ colorVariable[] = {
 
 // [HGM] font: keep a font for each square size, even non-stndard ones
 #define NUM_SIZES 18
-#define MAX_SIZE 130
 Boolean fontIsSet[NUM_FONTS], fontValid[NUM_FONTS][MAX_SIZE];
 char *fontTable[NUM_FONTS][MAX_SIZE];
 
@@ -444,9 +443,13 @@ SetFontDefaults ()
 }
 
 void
-ChangeFont (char **font, int fnr, int size, char *def, int pix)
+ChangeFont (int force, char **font, int fnr, int size, char *def, int pix)
 {
-    if(!fontValid[fnr][size]) { ASSIGN(fontTable[fnr][size], def); fontIsSet[fnr] = False; } // use default
+    if(!fontValid[fnr][size]) {
+       if(fontIsSet[fnr] && !force) return; // unless forced we do not replace an explicitly specified font by a default
+       ASSIGN(fontTable[fnr][size], def);   // use default
+       fontIsSet[fnr] = False;
+    }
     FREE(*font); *font = InsertPxlSize(fontTable[fnr][size], pix);
 }
 
@@ -523,9 +526,10 @@ SaveFontArg (FILE *f, ArgDescriptor *ad)
     default:
       return;
   }
+  if(fontIsSet[n])           // only save fonts that were not defaults
   for(i=0; i<NUM_SIZES; i++) // [HGM] font: current font becomes standard for current size
     if(sizeDefaults[i].squareSize == initialSquareSize) { // only for standard sizes!
-       fontTable[n][initialSquareSize] = strdup(name);
+       ASSIGN(fontTable[n][initialSquareSize], name);
        fontValid[n][initialSquareSize] = True;
        break;
   }
@@ -1700,11 +1704,23 @@ ReSize (WindowPlacement *wp)
        for(h=0; sizeDefaults[h].name && sizeDefaults[h].squareSize*8 > sqx*BOARD_WIDTH; h++) {}
        if(initialSquareSize != sizeDefaults[h].squareSize) { // boardSize changed
            initialSquareSize = sizeDefaults[h].squareSize; // used for saving font
-           ChangeFont(&appData.clockFont, CLOCK_FONT, initialSquareSize, CLOCK_FONT_NAME, 2*(sizeDefaults[h].clockFontPxlSize+1)/3);
-           ChangeFont(&appData.font, MESSAGE_FONT, initialSquareSize, DEFAULT_FONT_NAME, sizeDefaults[h].coordFontPxlSize);
+           ChangeFont(1, &appData.clockFont, CLOCK_FONT, initialSquareSize, CLOCK_FONT_NAME, 2*(sizeDefaults[h].clockFontPxlSize+1)/3);
+           ChangeFont(1, &appData.font, MESSAGE_FONT, initialSquareSize, DEFAULT_FONT_NAME, sizeDefaults[h].coordFontPxlSize);
+           ChangeFont(0, &appData.icsFont, CONSOLE_FONT, initialSquareSize, CONSOLE_FONT_NAME, sizeDefaults[h].coordFontPxlSize);
+           ChangeFont(0, &appData.tagsFont, EDITTAGS_FONT, initialSquareSize, TAGS_FONT_NAME, sizeDefaults[h].coordFontPxlSize);
+           ChangeFont(0, &appData.commentFont, COMMENT_FONT, initialSquareSize, COMMENT_FONT_NAME, sizeDefaults[h].coordFontPxlSize);
+           ChangeFont(0, &appData.gameListFont, GAMELIST_FONT, initialSquareSize, GAMELIST_FONT_NAME, sizeDefaults[h].coordFontPxlSize);
+           ChangeFont(0, &appData.coordFont, MOVEHISTORY_FONT, initialSquareSize, HISTORY_FONT_NAME, sizeDefaults[h].coordFontPxlSize);
            DisplayBothClocks();
            ApplyFont(&mainOptions[W_MESSG], NULL);
            for(i=1; i<6; i++) ApplyFont(&mainOptions[W_BUTTON+i], NULL);
+           ApplyFont(&tagsOptions[1], NULL);
+           ApplyFont(&commentOptions[0], NULL);
+           ApplyFont(&historyOptions[0], NULL);
+           ApplyFont(&engoutOptions[5], NULL);
+           ApplyFont(&engoutOptions[12], NULL);
+           ApplyFont(&chatOptions[11], appData.icsFont);
+           AppendColorized(&chatOptions[6], NULL, 0); // kludge to replace font tag
        }
        if(!strchr(appData.boardSize, ',')) {
            ASSIGN(appData.boardSize, sizeDefaults[h].name);