X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gtk%2Fxboard.c;h=96889c85ce241b6791d605b23c94295fb36445dd;hb=14b8ba6e96505b24eb49b28c10444c027e43f5b5;hp=c6579d8fd7396a21bd2e204b8063c5df308ca401;hpb=12386b8e128f848b3c1aecbca88e763e696a78bd;p=xboard.git diff --git a/gtk/xboard.c b/gtk/xboard.c index c6579d8..96889c8 100644 --- a/gtk/xboard.c +++ b/gtk/xboard.c @@ -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,6 +443,17 @@ SetFontDefaults () } void +ChangeFont (int force, char **font, int fnr, int size, char *def, int pix) +{ + 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; + } else fontIsSet[fnr] = True; + 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 } @@ -516,9 +526,10 @@ SaveFontArg (FILE *f, ArgDescriptor *ad) default: return; } + if(fontIsSet[n]) // only save fonts that were not defaults for(i=0; i sqx*BOARD_WIDTH; h++) {} + for(h=0; sizeDefaults[h+1].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(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.historyFont, 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); @@ -2092,10 +2113,10 @@ LockBoardSize (int after) static char *oldClockFont, *oldMessgFont; int w, h; if(oldMessgFont && !strcmp(oldMessgFont, appData.font) && - oldClockFont && !strcmp(oldClockFont, appData.clockFont) ) return; // only do something when font changed + oldClockFont && !strcmp(oldClockFont, appData.clockFont) && after < 2) return; // only do something when font changed w = BOARD_WIDTH*(squareSize + lineGap) + lineGap; h = BOARD_HEIGHT*(squareSize + lineGap) + lineGap; - if(after) { + if(after & 1) { ASSIGN(oldClockFont, appData.clockFont); ASSIGN(oldMessgFont, appData.font); gtk_window_resize(GTK_WINDOW(shellWidget), w, h); @@ -2109,9 +2130,10 @@ LockBoardSize (int after) void DisplayTimerLabel (Option *opt, char *color, long timer, int highlight) { + static int twoLines = -1; GtkWidget *w = (GtkWidget *) opt->handle; GdkColor col; - char *markup; + char *markup, two = (appData.logoSize != 0); char bgcolor[10]; char fgcolor[10]; @@ -2128,12 +2150,14 @@ DisplayTimerLabel (Option *opt, char *color, long timer, int highlight) strcpy(fgcolor, appData.lowTimeWarningColor); } + if(! partnerUp && two != twoLines) LockBoardSize(2); // lock board size if clock height changes + gdk_color_parse( bgcolor, &col ); gtk_widget_modify_bg(gtk_widget_get_parent(opt->handle), GTK_STATE_NORMAL, &col); if (appData.clockMode) { markup = g_markup_printf_escaped("%s:%s%s", appData.clockFont, - bgcolor, fgcolor, color, appData.logoSize && !partnerUp ? "\n" : " ", TimeString(timer)); + bgcolor, fgcolor, color, two ? "\n" : " ", TimeString(timer)); // markup = g_markup_printf_escaped("%s:%s%s", // bgcolor, fgcolor, color, appData.logoSize && !partnerUp ? "\n" : " ", TimeString(timer)); } else { @@ -2144,6 +2168,8 @@ DisplayTimerLabel (Option *opt, char *color, long timer, int highlight) } gtk_label_set_markup(GTK_LABEL(w), markup); g_free(markup); + + if(!partnerUp && two != twoLines) LockBoardSize(3), twoLines = two; } static GdkPixbuf **clockIcons[] = { &WhiteIcon, &BlackIcon };