Refactor clock display code
authorH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 6 Apr 2020 21:02:37 +0000 (23:02 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 6 Apr 2020 21:10:37 +0000 (23:10 +0200)
The functions DisplayTimerLabel() in XBoard and DisplayAClock() in
WinBoard now first create the text to display in a buffer, with the
possible line break in logo mode indicated as underscore. This
underscore is then later replaced by linefeed or space, depending
on whether we want a one-line or two-line clock. This as preparation
for also printing other texts.

gtk/xboard.c
winboard/winboard.c
xaw/xboard.c

index b9bfd32..8d3909a 100644 (file)
@@ -2132,7 +2132,7 @@ DisplayTimerLabel (Option *opt, char *color, long timer, int highlight)
     static int twoLines = -1;
     GtkWidget *w = (GtkWidget *) opt->handle;
     GdkColor col;
-    char *markup, two = (appData.logoSize != 0);
+    char buf[MSG_SIZ], *p, *markup, two = (appData.logoSize != 0);
     char bgcolor[10];
     char fgcolor[10];
 
@@ -2155,16 +2155,13 @@ DisplayTimerLabel (Option *opt, char *color, long timer, int highlight)
     gtk_widget_modify_bg(gtk_widget_get_parent(opt->handle), GTK_STATE_NORMAL, &col);
 
     if (appData.clockMode) {
-        markup = g_markup_printf_escaped("<span font=\"%s\" background=\"%s\" foreground=\"%s\">%s:%s%s</span>", appData.clockFont,
-                                        bgcolor, fgcolor, color, two ? "\n" : " ", TimeString(timer));
-//        markup = g_markup_printf_escaped("<span size=\"xx-large\" weight=\"heavy\" background=\"%s\" foreground=\"%s\">%s:%s%s</span>",
-//                                      bgcolor, fgcolor, color, appData.logoSize && !partnerUp ? "\n" : " ", TimeString(timer));
+        snprintf(buf, MSG_SIZ, "%s:_%s", color, TimeString(timer));
     } else {
-        markup = g_markup_printf_escaped("<span font=\"%s\" background=\"%s\" foreground=\"%s\">%s  </span>", appData.clockFont,
-                                        bgcolor, fgcolor, color);
-//        markup = g_markup_printf_escaped("<span size=\"xx-large\" weight=\"heavy\" background=\"%s\" foreground=\"%s\">%s  </span>",
-//                                      bgcolor, fgcolor, color);
+        snprintf(buf, MSG_SIZ, "%s  ", color);
     }
+    p = strchr(buf, '_'); if(p) *p = (two ? '\n' : ' ');
+    markup = g_markup_printf_escaped("<span font=\"%s\" background=\"%s\" foreground=\"%s\">%s</span>", appData.clockFont,
+                                        bgcolor, fgcolor, buf);
     gtk_label_set_markup(GTK_LABEL(w), markup);
     g_free(markup);
 
index 1302c8c..d385c1d 100644 (file)
@@ -2069,6 +2069,7 @@ static int TranslatePieceToFontPiece( int piece )
         return PM_WSG;\r
     case WhiteLance:\r
 \r
+\r
         return PM_WL;\r
     case WhiteFalcon:\r
         return PM_WV;\r
@@ -7764,7 +7765,7 @@ DisplayAClock(HDC hdc, int timeRemaining, int highlight,
               RECT *rect, char *color, char *flagFell)\r
 {\r
   char buf[100];\r
-  char *str;\r
+  char *str, *p;\r
   COLORREF oldFg, oldBg;\r
   HFONT oldFont;\r
 \r
@@ -7773,11 +7774,13 @@ DisplayAClock(HDC hdc, int timeRemaining, int highlight,
     if (tinyLayout == 2)\r
       snprintf(buf, sizeof(buf)/sizeof(buf[0]), "%c %s %s", color[0], TimeString(timeRemaining), flagFell);\r
     else\r
-      snprintf(buf, sizeof(buf)/sizeof(buf[0]), "%s:%c%s %s", color, (logoHeight>0 ? 0 : ' '), TimeString(timeRemaining), flagFell);\r
+      snprintf(buf, sizeof(buf)/sizeof(buf[0]), "%s:_%s %s", color, TimeString(timeRemaining), flagFell);\r
     str = buf;\r
   } else {\r
     str = color;\r
   }\r
+  p = strchr(str, '_');\r
+  if(p) *p = (logoHeight > 0 ? 0 : ' ');\r
 \r
   if (highlight) {\r
     oldFg = SetTextColor(hdc, RGB(255, 255, 255)); /* white */\r
@@ -7794,9 +7797,9 @@ DisplayAClock(HDC hdc, int timeRemaining, int highlight,
   ExtTextOut(hdc, rect->left + MESSAGE_LINE_LEFTMARGIN,\r
             rect->top, ETO_CLIPPED|ETO_OPAQUE,\r
             rect, str, strlen(str), NULL);\r
-  if(logoHeight > 0 && appData.clockMode) {\r
+  if(logoHeight > 0 && p) {\r
       RECT r;\r
-      str += strlen(color)+2;\r
+      str = p + 1;\r
       r.top = rect->top + logoHeight/2;\r
       r.left = rect->left;\r
       r.right = rect->right;\r
index 1c3ffc7..87d831e 100644 (file)
@@ -2328,7 +2328,7 @@ StartClockTimer (long millisec)
 void
 DisplayTimerLabel (Option *opt, char *color, long timer, int highlight)
 {
-    char buf[MSG_SIZ];
+    char buf[MSG_SIZ], *p;
     Arg args[16];
     Widget w = (Widget) opt->handle;
 
@@ -2341,12 +2341,12 @@ DisplayTimerLabel (Option *opt, char *color, long timer, int highlight)
       foregroundOrWarningColor = lowTimeWarningColor;
 
     if (appData.clockMode) {
-      snprintf(buf, MSG_SIZ, "%s:%s%s", color, appData.logoSize && !partnerUp ? "\n" : " ", TimeString(timer));
-      XtSetArg(args[0], XtNlabel, buf);
+      snprintf(buf, MSG_SIZ, "%s:_%s", color, TimeString(timer));
     } else {
       snprintf(buf, MSG_SIZ, "%s  ", color);
-      XtSetArg(args[0], XtNlabel, buf);
     }
+    p = strchr(buf, '_'); if(p) *p = (appData.logoSize && !partnerUp ? '\n' : ' ');
+    XtSetArg(args[0], XtNlabel, buf);
 
     if (highlight) {