changeset 739:0d5fb1d9077c

Allow "bright" text colors
author Mikael Berthe <mikael@lilotux.net>
date Fri, 10 Mar 2006 17:18:50 +0100
parents 03db650f6015
children 1877838d3c27
files mcabber/mcabberrc.example mcabber/src/screen.c mcabber/src/screen.h
diffstat 3 files changed, 82 insertions(+), 60 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/mcabberrc.example	Fri Mar 10 12:45:13 2006 +0100
+++ b/mcabber/mcabberrc.example	Fri Mar 10 17:18:50 2006 +0100
@@ -135,8 +135,13 @@
 
 # Colors
 # Colors are: black, red, green, yellow, blue, magenta, cyan, white
+# For text colors (i.e. not background and bg* colors) you can also use
+# the "bright" prefix to get a bright/bold color.  Example: brightblue
 # You can use the "default" color, too (i.e. for transparent background)
 #
+# You can have a look at the contrib/themes/ directory to see some sample
+# color settings.
+#
 # background: background color of the chat window and the log window
 # general:    text color in the chat window and the log window
 # highlight:  text color in the chat window for highlighted lines
--- a/mcabber/src/screen.c	Fri Mar 10 12:45:13 2006 +0100
+++ b/mcabber/src/screen.c	Fri Mar 10 17:18:50 2006 +0100
@@ -41,6 +41,7 @@
 #include "list.h"
 
 #define window_entry(n) list_entry(n, window_entry_t, list)
+#define get_color(col)  (COLOR_PAIR(col)|COLOR_ATTRIB[col])
 
 #define DEFAULT_LOG_WIN_HEIGHT (5+2)
 #define DEFAULT_ROSTER_WIDTH    24
@@ -122,12 +123,13 @@
   if (!strcmp(name, "white"))
     return COLOR_WHITE;
 
+  scr_LogPrint(LPRINT_LOGNORM, "ERROR: Wrong color: %s", name);
   return -1;
 }
 
 static void ParseColors(void)
 {
-  const char *colors[10] = {
+  const char *colors[] = {
     "", "",
     "general",
     "highlight",
@@ -139,59 +141,69 @@
     NULL
   };
 
-  char *tmp = g_new(char, 512);
   const char *color;
   const char *background   = settings_opt_get("color_background");
   const char *backselected = settings_opt_get("color_bgrostersel");
   const char *backstatus   = settings_opt_get("color_bgstatus");
-  int i = 0;
+  char *tmp;
+  int i;
+
+  // Initialize color attributes
+  memset(COLOR_ATTRIB, 0, sizeof(COLOR_ATTRIB));
 
   // Default values
   if (!background)   background   = "black";
   if (!backselected) backselected = "cyan";
   if (!backstatus)   backstatus   = "blue";
 
-  while (colors[i]) {
-    snprintf(tmp, 512, "color_%s", colors[i]);
+  for (i=0; colors[i]; i++) {
+    tmp = g_strdup_printf("color_%s", colors[i]);
     color = settings_opt_get(tmp);
+    g_free(tmp);
+
+    if (color) {
+      if (!strncmp(color, "bright", 6)) {
+        COLOR_ATTRIB[i+1] = A_BOLD;
+        color += 6;
+      }
+    }
 
     switch (i + 1) {
-    case 1:
-      init_pair(1, COLOR_BLACK, COLOR_WHITE);
-      break;
-    case 2:
-      init_pair(2, COLOR_WHITE, COLOR_BLACK);
-      break;
-    case COLOR_GENERAL:
-      init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
-                FindColor(background));
-      break;
-    case COLOR_HIGHLIGHT:
-      init_pair(i+1, ((color) ? FindColor(color) : COLOR_CYAN),
-                FindColor(background));
-      break;
-    case COLOR_STATUS:
-      init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
-                FindColor(backstatus));
-      break;
-    case COLOR_ROSTER:
-      init_pair(i+1, ((color) ? FindColor(color) : COLOR_GREEN),
-                FindColor(background));
-      break;
-    case COLOR_ROSTERSEL:
-      init_pair(i+1, ((color) ? FindColor(color) : COLOR_BLUE),
-                FindColor(backselected));
-      break;
-    case COLOR_ROSTERSELNMSG:
-      init_pair(i+1, ((color) ? FindColor(color) : COLOR_RED),
-                FindColor(backselected));
-      break;
-    case COLOR_ROSTERNMSG:
-      init_pair(i+1, ((color) ? FindColor(color) : COLOR_RED),
-                FindColor(background));
-      break;
+      case 1:
+          init_pair(1, COLOR_BLACK, COLOR_WHITE);
+          break;
+      case 2:
+          init_pair(2, COLOR_WHITE, COLOR_BLACK);
+          break;
+      case COLOR_GENERAL:
+          init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
+                    FindColor(background));
+          break;
+      case COLOR_HIGHLIGHT:
+          init_pair(i+1, ((color) ? FindColor(color) : COLOR_CYAN),
+                    FindColor(background));
+          break;
+      case COLOR_STATUS:
+          init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
+                    FindColor(backstatus));
+          break;
+      case COLOR_ROSTER:
+          init_pair(i+1, ((color) ? FindColor(color) : COLOR_GREEN),
+                    FindColor(background));
+          break;
+      case COLOR_ROSTERSEL:
+          init_pair(i+1, ((color) ? FindColor(color) : COLOR_BLUE),
+                    FindColor(backselected));
+          break;
+      case COLOR_ROSTERSELNMSG:
+          init_pair(i+1, ((color) ? FindColor(color) : COLOR_RED),
+                    FindColor(backselected));
+          break;
+      case COLOR_ROSTERNMSG:
+          init_pair(i+1, ((color) ? FindColor(color) : COLOR_RED),
+                    FindColor(background));
+          break;
     }
-    i++;
   }
 }
 
@@ -301,7 +313,7 @@
     safe_usleep(250);
     tmp->win = newwin(lines, cols, y, x);
   }
-  wbkgd(tmp->win, COLOR_PAIR(COLOR_GENERAL));
+  wbkgd(tmp->win, get_color(COLOR_GENERAL));
   tmp->panel = new_panel(tmp->win);
   tmp->name = g_strdup(title);
 
@@ -394,7 +406,7 @@
     // You need to set it to the whole prefix length + 1
     if (line) {
       if (line->flags & HBB_PREFIX_HLIGHT)
-        wattrset(win_entry->win, COLOR_PAIR(COLOR_HIGHLIGHT));
+        wattrset(win_entry->win, get_color(COLOR_HIGHLIGHT));
 
       if (line->timestamp) {
         strftime(date, 30, "%m-%d %H:%M", localtime(&line->timestamp));
@@ -425,7 +437,7 @@
       wprintw(win_entry->win, "%s", line->text); // Display text line
 
       if (line->flags & HBB_PREFIX_HLIGHT)
-        wattrset(win_entry->win, COLOR_PAIR(COLOR_GENERAL));
+        wattrset(win_entry->win, get_color(COLOR_GENERAL));
       wclrtoeol(win_entry->win);
       g_free(line->text);
     } else {
@@ -614,11 +626,11 @@
       fprintf(stderr, "Cannot create windows!\n");
       exit(EXIT_FAILURE);
     }
-    wbkgd(rosterWnd,      COLOR_PAIR(COLOR_GENERAL));
-    wbkgd(chatWnd,        COLOR_PAIR(COLOR_GENERAL));
-    wbkgd(logWnd,         COLOR_PAIR(COLOR_GENERAL));
-    wbkgd(chatstatusWnd,  COLOR_PAIR(COLOR_STATUS));
-    wbkgd(mainstatusWnd,  COLOR_PAIR(COLOR_STATUS));
+    wbkgd(rosterWnd,      get_color(COLOR_GENERAL));
+    wbkgd(chatWnd,        get_color(COLOR_GENERAL));
+    wbkgd(logWnd,         get_color(COLOR_GENERAL));
+    wbkgd(chatstatusWnd,  get_color(COLOR_STATUS));
+    wbkgd(mainstatusWnd,  get_color(COLOR_STATUS));
   } else {
     /* Resize/move windows */
     wresize(rosterWnd, CHAT_WIN_HEIGHT, Roster_Width);
@@ -839,7 +851,7 @@
 
   if (Roster_Width) {
     // Redraw the vertical line (not very good...)
-    wattrset(rosterWnd, COLOR_PAIR(COLOR_GENERAL));
+    wattrset(rosterWnd, get_color(COLOR_GENERAL));
     for (i=0 ; i < CHAT_WIN_HEIGHT ; i++)
       mvwaddch(rosterWnd, i, Roster_Width-1, ACS_VLINE);
   }
@@ -917,18 +929,18 @@
     }
     if (buddy == current_buddy) {
       if (pending == '#')
-        wattrset(rosterWnd, COLOR_PAIR(COLOR_ROSTERSELNMSG));
+        wattrset(rosterWnd, get_color(COLOR_ROSTERSELNMSG));
       else
-        wattrset(rosterWnd, COLOR_PAIR(COLOR_ROSTERSEL));
+        wattrset(rosterWnd, get_color(COLOR_ROSTERSEL));
       // The 3 following lines aim at coloring the whole line
       wmove(rosterWnd, i, 0);
       for (n = 0; n < maxx; n++)
         waddch(rosterWnd, ' ');
     } else {
       if (pending == '#')
-        wattrset(rosterWnd, COLOR_PAIR(COLOR_ROSTERNMSG));
+        wattrset(rosterWnd, get_color(COLOR_ROSTERNMSG));
       else
-        wattrset(rosterWnd, COLOR_PAIR(COLOR_ROSTER));
+        wattrset(rosterWnd, get_color(COLOR_ROSTER));
     }
 
     if (Roster_Width > 7)
--- a/mcabber/src/screen.h	Fri Mar 10 12:45:13 2006 +0100
+++ b/mcabber/src/screen.h	Fri Mar 10 17:18:50 2006 +0100
@@ -6,13 +6,18 @@
 
 #include "logprint.h"
 
-#define COLOR_GENERAL       3
-#define COLOR_HIGHLIGHT     4
-#define COLOR_STATUS        5
-#define COLOR_ROSTER        6
-#define COLOR_ROSTERSEL     7
-#define COLOR_ROSTERSELNMSG 8
-#define COLOR_ROSTERNMSG    9
+enum colors {
+  COLOR_GENERAL = 3,
+  COLOR_HIGHLIGHT,
+  COLOR_STATUS,
+  COLOR_ROSTER,
+  COLOR_ROSTERSEL,
+  COLOR_ROSTERSELNMSG,
+  COLOR_ROSTERNMSG,
+  COLOR_max
+};
+
+int COLOR_ATTRIB[COLOR_max];
 
 // Length of the timestamp & flag prefix in the chat buffer window
 #define PREFIX_WIDTH    17