mirror of
https://github.com/irssi/irssi.git
synced 2026-08-09 20:00:23 +02:00
Make line_add_colors part of the textbuffer api.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4748 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
a3526caf41
commit
da232b18c1
3 changed files with 59 additions and 56 deletions
|
|
@ -266,6 +266,53 @@ int textbuffer_line_exists_after(LINE_REC *line, LINE_REC *search)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static int last_fg, last_bg, last_flags;
|
||||
|
||||
void textbuffer_line_add_colors(TEXT_BUFFER_REC *buffer, LINE_REC **line,
|
||||
int fg, int bg, int flags)
|
||||
{
|
||||
unsigned char data[20];
|
||||
int pos;
|
||||
|
||||
/* get the fg & bg command chars */
|
||||
fg = fg < 0 ? LINE_COLOR_DEFAULT : fg & 0x0f;
|
||||
bg = LINE_COLOR_BG | (bg < 0 ? LINE_COLOR_DEFAULT : bg & 0x0f);
|
||||
if (flags & GUI_PRINT_FLAG_BOLD)
|
||||
fg |= LINE_COLOR_BOLD;
|
||||
if (flags & GUI_PRINT_FLAG_BLINK)
|
||||
bg |= LINE_COLOR_BLINK;
|
||||
|
||||
pos = 0;
|
||||
if (fg != last_fg) {
|
||||
last_fg = fg;
|
||||
data[pos++] = 0;
|
||||
data[pos++] = fg == 0 ? LINE_CMD_COLOR0 : fg;
|
||||
}
|
||||
if (bg != last_bg) {
|
||||
last_bg = bg;
|
||||
data[pos++] = 0;
|
||||
data[pos++] = bg;
|
||||
}
|
||||
|
||||
if ((flags & GUI_PRINT_FLAG_UNDERLINE) != (last_flags & GUI_PRINT_FLAG_UNDERLINE)) {
|
||||
data[pos++] = 0;
|
||||
data[pos++] = LINE_CMD_UNDERLINE;
|
||||
}
|
||||
if ((flags & GUI_PRINT_FLAG_REVERSE) != (last_flags & GUI_PRINT_FLAG_REVERSE)) {
|
||||
data[pos++] = 0;
|
||||
data[pos++] = LINE_CMD_REVERSE;
|
||||
}
|
||||
if (flags & GUI_PRINT_FLAG_INDENT) {
|
||||
data[pos++] = 0;
|
||||
data[pos++] = LINE_CMD_INDENT;
|
||||
}
|
||||
|
||||
if (pos > 0)
|
||||
*line = textbuffer_insert(buffer, *line, data, pos, NULL);
|
||||
|
||||
last_flags = flags;
|
||||
}
|
||||
|
||||
LINE_REC *textbuffer_append(TEXT_BUFFER_REC *buffer,
|
||||
const unsigned char *data, int len,
|
||||
LINE_INFO_REC *info)
|
||||
|
|
@ -296,6 +343,12 @@ LINE_REC *textbuffer_insert(TEXT_BUFFER_REC *buffer, LINE_REC *insert_after,
|
|||
buffer->last_eol = len >= 2 &&
|
||||
data[len-2] == 0 && data[len-1] == LINE_CMD_EOL;
|
||||
|
||||
if (buffer->last_eol) {
|
||||
last_fg = LINE_COLOR_DEFAULT;
|
||||
last_bg = LINE_COLOR_DEFAULT | LINE_COLOR_BG;
|
||||
last_flags = 0;
|
||||
}
|
||||
|
||||
return line;
|
||||
}
|
||||
|
||||
|
|
@ -533,6 +586,8 @@ GList *textbuffer_find_text(TEXT_BUFFER_REC *buffer, LINE_REC *startline,
|
|||
|
||||
void textbuffer_init(void)
|
||||
{
|
||||
last_fg = LINE_COLOR_DEFAULT;
|
||||
last_bg = LINE_COLOR_DEFAULT | LINE_COLOR_BG;
|
||||
buffer_chunk = g_mem_chunk_new("text buffer chunk",
|
||||
sizeof(TEXT_BUFFER_REC),
|
||||
sizeof(TEXT_BUFFER_REC)*32, G_ALLOC_AND_FREE);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue