Reset fontIsSet when sizing causes change to default font
authorH.G.Muller <hgm@hgm-xboard.(none)>
Wed, 6 Apr 2016 12:08:49 +0000 (14:08 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Sun, 17 Apr 2016 08:24:58 +0000 (10:24 +0200)
The array fontIsSet now tracks whether the fonts in actual use are
from a (possibly size-adapted) default, or were specified by an option
(also through a fontIsValid entry in the fontsTable) or the Fonts dialog.
For changing a font on sizing a subroutine is now used.

dialogs.c
dialogs.h
gtk/xboard.c

index c8c5729..0c1abf1 100644 (file)
--- a/dialogs.c
+++ b/dialogs.c
@@ -1625,7 +1625,6 @@ ShuffleMenuProc ()
 static void AdjustFont P((int n));
 
 static char *oldFont[7];
-char fontChanged[8];
 
 static int
 FontsOK (int n)
@@ -1634,24 +1633,24 @@ FontsOK (int n)
     int i;
     PopDown(TransientDlg); // Early popdown to prevent expose events frommasking each other
     LockBoardSize(0);
-    if(strcmp(oldFont[0], appData.clockFont)) fontChanged[CLOCK_FONT] = 1, DisplayBothClocks();
+    if(strcmp(oldFont[0], appData.clockFont)) fontIsSet[CLOCK_FONT] = 1, DisplayBothClocks();
     if(strcmp(oldFont[1], appData.font)) {
-       fontChanged[MESSAGE_FONT] = 1;
+       fontIsSet[MESSAGE_FONT] = 1;
        ApplyFont(&mainOptions[W_MESSG], NULL);
        for(i=1; i<6; i++) ApplyFont(&mainOptions[W_BUTTON+i], NULL);
     }
     LockBoardSize(1); // unlock
-    if(strcmp(oldFont[3], appData.tagsFont)) fontChanged[EDITTAGS_FONT] = 1, ApplyFont(&tagsOptions[1], NULL);
-    if(strcmp(oldFont[4], appData.commentFont)) fontChanged[COMMENT_FONT] = 1, ApplyFont(&commentOptions[0], NULL);
+    if(strcmp(oldFont[3], appData.tagsFont)) fontIsSet[EDITTAGS_FONT] = 1, ApplyFont(&tagsOptions[1], NULL);
+    if(strcmp(oldFont[4], appData.commentFont)) fontIsSet[COMMENT_FONT] = 1, ApplyFont(&commentOptions[0], NULL);
     if(strcmp(oldFont[5], appData.historyFont)) {
-       fontChanged[MOVEHISTORY_FONT] = 1;
+       fontIsSet[MOVEHISTORY_FONT] = 1;
        ApplyFont(&historyOptions[0], NULL);
        ApplyFont(&engoutOptions[5], NULL);
        ApplyFont(&engoutOptions[12], NULL);
     }
-    if(strcmp(oldFont[6], appData.gameListFont)) fontChanged[GAMELIST_FONT] = 1, ApplyFont(&gamesOptions[0], NULL);
+    if(strcmp(oldFont[6], appData.gameListFont)) fontIsSet[GAMELIST_FONT] = 1, ApplyFont(&gamesOptions[0], NULL);
     if(strcmp(oldFont[2], appData.icsFont)) {
-       fontChanged[CONSOLE_FONT] = 1;
+       fontIsSet[CONSOLE_FONT] = 1;
        ApplyFont(&chatOptions[11], appData.icsFont);
        AppendColorized(&chatOptions[6], NULL, 0); // kludge to replace font tag
     }
index 0d933d9..fa4ee52 100644 (file)
--- a/dialogs.h
+++ b/dialogs.h
@@ -133,6 +133,7 @@ extern WindowPlacement wpComment, wpTags, wpMoveHistory, wpMain, wpDualBoard, wp
 extern char *marked[];
 extern Boolean shellUp[];
 extern Option textOptions[], typeOptions[], dualOptions[], mainOptions[];
+extern Boolean fontIsSet[];
 
 
 void GetPlacement P((DialogClass dlg, WindowPlacement *wp));
index 7ea8382..df1f18e 100644 (file)
@@ -443,6 +443,13 @@ SetFontDefaults ()
   appData.gameListFont = strdup(GAMELIST_FONT_NAME);
 }
 
+void
+ChangeFont (char **font, int fnr, int size, char *def, int pix)
+{
+    if(!fontValid[fnr][size]) { ASSIGN(fontTable[fnr][size], def); fontIsSet[fnr] = False; } // use default
+    FREE(*font); *font = InsertPxlSize(fontTable[fnr][size], pix);
+}
+
 void
 CreateFonts ()
 { // no-op, until we identify the code for this already in XBoard and move it here
@@ -669,21 +676,21 @@ InitializeFonts (int clockFontPxlSize, int coordFontPxlSize, int fontPxlSize)
 {   // determine what fonts to use, and create them
 
     if(!fontIsSet[CLOCK_FONT] && fontValid[CLOCK_FONT][squareSize])
-       appData.clockFont = fontTable[CLOCK_FONT][squareSize];
+       appData.clockFont = fontTable[CLOCK_FONT][squareSize], fontIsSet[CLOCK_FONT] = True;
     if(!fontIsSet[MESSAGE_FONT] && fontValid[MESSAGE_FONT][squareSize])
-       appData.font = fontTable[MESSAGE_FONT][squareSize];
+       appData.font = fontTable[MESSAGE_FONT][squareSize], fontIsSet[MESSAGE_FONT] = True;
     if(!fontIsSet[COORD_FONT] && fontValid[COORD_FONT][squareSize])
-       appData.coordFont = fontTable[COORD_FONT][squareSize];
+       appData.coordFont = fontTable[COORD_FONT][squareSize], fontIsSet[COORD_FONT] = True;
     if(!fontIsSet[CONSOLE_FONT] && fontValid[CONSOLE_FONT][squareSize])
-       appData.icsFont = fontTable[CONSOLE_FONT][squareSize];
+       appData.icsFont = fontTable[CONSOLE_FONT][squareSize], fontIsSet[CONSOLE_FONT] = True;
     if(!fontIsSet[EDITTAGS_FONT] && fontValid[EDITTAGS_FONT][squareSize])
-       appData.tagsFont = fontTable[EDITTAGS_FONT][squareSize];
+       appData.tagsFont = fontTable[EDITTAGS_FONT][squareSize], fontIsSet[EDITTAGS_FONT] = True;
     if(!fontIsSet[COMMENT_FONT] && fontValid[COMMENT_FONT][squareSize])
-       appData.commentFont = fontTable[COMMENT_FONT][squareSize];
+       appData.commentFont = fontTable[COMMENT_FONT][squareSize], fontIsSet[COMMENT_FONT] = True;
     if(!fontIsSet[MOVEHISTORY_FONT] && fontValid[MOVEHISTORY_FONT][squareSize])
-       appData.historyFont = fontTable[MOVEHISTORY_FONT][squareSize];
+       appData.historyFont = fontTable[MOVEHISTORY_FONT][squareSize], fontIsSet[MOVEHISTORY_FONT] = True;
     if(!fontIsSet[GAMELIST_FONT] && fontValid[GAMELIST_FONT][squareSize])
-       appData.gameListFont = fontTable[GAMELIST_FONT][squareSize];
+       appData.gameListFont = fontTable[GAMELIST_FONT][squareSize], fontIsSet[GAMELIST_FONT] = True;
 
     appData.font = InsertPxlSize(appData.font, coordFontPxlSize);
     appData.clockFont = InsertPxlSize(appData.clockFont, clockFontPxlSize);
@@ -1693,10 +1700,8 @@ 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
-           if(!fontValid[CLOCK_FONT][initialSquareSize]) { ASSIGN(fontTable[CLOCK_FONT][initialSquareSize], CLOCK_FONT_NAME); }
-           appData.clockFont = InsertPxlSize(fontTable[CLOCK_FONT][initialSquareSize], 2*(sizeDefaults[h].clockFontPxlSize+1)/3);
-           if(!fontValid[MESSAGE_FONT][initialSquareSize]) { ASSIGN(fontTable[MESSAGE_FONT][initialSquareSize], DEFAULT_FONT_NAME); }
-           appData.font = InsertPxlSize(fontTable[MESSAGE_FONT][initialSquareSize], sizeDefaults[h].coordFontPxlSize);
+           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);
            DisplayBothClocks();
            ApplyFont(&mainOptions[W_MESSG], NULL);
            for(i=1; i<6; i++) ApplyFont(&mainOptions[W_BUTTON+i], NULL);