1
0
mirror of https://github.com/irssi/irssi.git synced 2024-11-03 04:27:19 -05:00

Highlight colors can now have background color set with fg,bg. Works

with activity list too, useful for example blinking.


git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1249 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2001-02-19 03:25:24 +00:00 committed by cras
parent 1117638b52
commit c1c7674ae2
7 changed files with 58 additions and 20 deletions

View File

@ -10,6 +10,6 @@ char *name;
time_t createtime; time_t createtime;
int data_level; int data_level;
int hilight_color; int hilight_color, hilight_bg_color;
#undef STRUCT_SERVER_REC #undef STRUCT_SERVER_REC

View File

@ -42,7 +42,7 @@ typedef struct {
int histlines; int histlines;
int data_level; /* current data level */ int data_level; /* current data level */
int hilight_color; /* current hilight color */ int hilight_color, hilight_bg_color; /* current hilight color */
time_t last_timestamp; /* When was last timestamp printed */ time_t last_timestamp; /* When was last timestamp printed */
time_t last_line; /* When was last line printed */ time_t last_line; /* When was last line printed */

View File

@ -213,6 +213,7 @@ void format_create_dest(TEXT_DEST_REC *dest,
dest->hilight_priority = 0; dest->hilight_priority = 0;
dest->hilight_color = 0; dest->hilight_color = 0;
dest->hilight_bg_color = 0;
} }
static char *format_get_text_args(TEXT_DEST_REC *dest, static char *format_get_text_args(TEXT_DEST_REC *dest,

View File

@ -38,7 +38,7 @@ typedef struct {
int level; int level;
int hilight_priority; int hilight_priority;
int hilight_color; int hilight_color, hilight_bg_color;
} TEXT_DEST_REC; } TEXT_DEST_REC;
int format_find_tag(const char *module, const char *tag); int format_find_tag(const char *module, const char *tag);

View File

@ -291,11 +291,32 @@ HILIGHT_REC *hilight_match(SERVER_REC *server, const char *channel,
return NULL; return NULL;
} }
static int get_colors(const char *color, int *fg, int *bg)
{
const char *p;
if (!is_numeric(color, ','))
return FALSE;
*fg = atoi(color);
*bg = -1;
p = strchr(color, ',');
if (p != NULL) {
p++;
if (!is_numeric(p, '\0'))
return FALSE;
*bg = atoi(p);
}
return TRUE;
}
char *hilight_get_color(HILIGHT_REC *rec, int activity) char *hilight_get_color(HILIGHT_REC *rec, int activity)
{ {
const char *color; const char *color;
char number[MAX_INT_STRLEN]; char number[MAX_INT_STRLEN];
int colornum; int colornum, fg, bg;
g_return_val_if_fail(rec != NULL, NULL); g_return_val_if_fail(rec != NULL, NULL);
@ -315,15 +336,16 @@ char *hilight_get_color(HILIGHT_REC *rec, int activity)
color = number; color = number;
} }
if (is_numeric(color, 0)) if (get_colors(color, &fg, &bg)) {
return g_strdup_printf("\003%02d", atoi(color)); return bg == -1 ? g_strdup_printf("\003%02d", fg) :
g_strdup_printf("\003%d,%02d", fg, bg);
}
return g_strdup(color); return g_strdup(color);
} }
static void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec) static void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec)
{ {
char *color; char *color, *bgcolor;
dest->level |= MSGLEVEL_HILIGHT; dest->level |= MSGLEVEL_HILIGHT;
@ -331,8 +353,14 @@ static void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec)
dest->hilight_priority = rec->priority; dest->hilight_priority = rec->priority;
color = hilight_get_color(rec, TRUE); color = hilight_get_color(rec, TRUE);
if (*color == 3) if (*color == 3) {
dest->hilight_color = atoi(color+1); dest->hilight_color = atoi(color+1);
bgcolor = color+1;
while (*bgcolor != ',' && *bgcolor != '\0')
bgcolor++;
dest->hilight_bg_color = *bgcolor != ',' ? -1 :
atoi(bgcolor+1);
}
g_free(color); g_free(color);
} }

View File

@ -35,8 +35,8 @@
static char **hide_targets; static char **hide_targets;
static int hide_level, msg_level, hilight_level; static int hide_level, msg_level, hilight_level;
static void window_activity(WINDOW_REC *window, static void window_activity(WINDOW_REC *window, int data_level,
int data_level, int hilight_color) int hilight_color, int hilight_bg_color)
{ {
int old_data_level; int old_data_level;
@ -44,6 +44,7 @@ static void window_activity(WINDOW_REC *window,
if (data_level == 0 || window->data_level < data_level) { if (data_level == 0 || window->data_level < data_level) {
window->data_level = data_level; window->data_level = data_level;
window->hilight_color = hilight_color; window->hilight_color = hilight_color;
window->hilight_bg_color = hilight_bg_color;
signal_emit("window hilight", 1, window); signal_emit("window hilight", 1, window);
} }
@ -51,8 +52,8 @@ static void window_activity(WINDOW_REC *window,
GINT_TO_POINTER(old_data_level)); GINT_TO_POINTER(old_data_level));
} }
static void window_item_activity(WI_ITEM_REC *item, static void window_item_activity(WI_ITEM_REC *item, int data_level,
int data_level, int hilight_color) int hilight_color, int hilight_bg_color)
{ {
int old_data_level; int old_data_level;
@ -60,6 +61,7 @@ static void window_item_activity(WI_ITEM_REC *item,
if (data_level == 0 || item->data_level < data_level) { if (data_level == 0 || item->data_level < data_level) {
item->data_level = data_level; item->data_level = data_level;
item->hilight_color = hilight_color; item->hilight_color = hilight_color;
item->hilight_bg_color = hilight_bg_color;
signal_emit("window item hilight", 1, item); signal_emit("window item hilight", 1, item);
} }
@ -94,10 +96,12 @@ static void sig_hilight_text(TEXT_DEST_REC *dest, const char *msg)
item = window_item_find(dest->server, dest->target); item = window_item_find(dest->server, dest->target);
if (item != NULL) { if (item != NULL) {
window_item_activity(item, data_level, window_item_activity(item, data_level,
dest->hilight_color); dest->hilight_color,
dest->hilight_bg_color);
} }
} }
window_activity(dest->window, data_level, dest->hilight_color); window_activity(dest->window, data_level,
dest->hilight_color, dest->hilight_bg_color);
} }
static void sig_dehilight_window(WINDOW_REC *window) static void sig_dehilight_window(WINDOW_REC *window)
@ -107,9 +111,9 @@ static void sig_dehilight_window(WINDOW_REC *window)
g_return_if_fail(window != NULL); g_return_if_fail(window != NULL);
if (window->data_level != 0) { if (window->data_level != 0) {
window_activity(window, 0, 0); window_activity(window, 0, 0, 0);
for (tmp = window->items; tmp != NULL; tmp = tmp->next) for (tmp = window->items; tmp != NULL; tmp = tmp->next)
window_item_activity(tmp->data, 0, 0); window_item_activity(tmp->data, 0, 0, 0);
} }
} }

View File

@ -353,9 +353,14 @@ static void draw_activity(gchar *title, gboolean act, gboolean det, int size)
set_color(stdscr, sbar_color_bold); set_color(stdscr, sbar_color_bold);
break; break;
default: default:
if (window->hilight_color > 0) if (window->hilight_color > 0) {
set_color(stdscr, sbar_color_background | mirc_colors[window->hilight_color%16]); int bg;
else
bg = window->hilight_bg_color == -1 ?
sbar_color_background :
(window->hilight_bg_color << 4);
set_color(stdscr, bg | mirc_colors[window->hilight_color%16]);
} else
set_color(stdscr, sbar_color_act_highlight); set_color(stdscr, sbar_color_act_highlight);
break; break;
} }