X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Funix%2Ftgfx.c;h=f36eccedd9bc5119b265f40c2d2a4a4d2664ab1d;hb=93d652d345ffa01376110a6e41340537efe87d4b;hp=b7f9f828f0278d0a5fc98b9065309f6e638e69e4;hpb=4577dd26b3ecbf7ccc5ff55efa991334136866e1;p=oftp diff --git a/src/unix/tgfx.c b/src/unix/tgfx.c index b7f9f82..f36ecce 100644 --- a/src/unix/tgfx.c +++ b/src/unix/tgfx.c @@ -1,25 +1,38 @@ #include #include "tgfx.h" +#include "util.h" + +struct cpair { + int pair; + int fg, bg; +}; +static struct cpair *colors; +static int num_colors; static int fgcol, bgcol; static int bgchar; +static int cur_pair; static int cur_x, cur_y; static int curses_color(int col); +static void upd_color(void); void tg_init(void) { initscr(); - raw(); + cbreak(); keypad(stdscr, TRUE); + nodelay(stdscr, TRUE); noecho(); + curs_set(0); start_color(); fgcol = curses_color(TGFX_WHITE); bgcol = curses_color(TGFX_BLACK); bgchar = ' '; - tg_color(fgcol | (bgcol << 4)); + colors = malloc_nf(COLORS * sizeof *colors); + num_colors = 0; } void tg_cleanup(void) @@ -42,20 +55,17 @@ void tg_clear(void) void tg_fgcolor(int col) { fgcol = curses_color(col); - init_pair(1, fgcol, bgcol); } void tg_bgcolor(int col) { bgcol = curses_color(col); - init_pair(1, fgcol, bgcol); } void tg_color(int col) { fgcol = curses_color(col & 0xf); bgcol = curses_color((col >> 4) & 0xf); - init_pair(1, fgcol, bgcol); } void tg_bgchar(int c) @@ -83,10 +93,11 @@ void tg_text(int x, int y, const char *fmt, ...) void tg_vtext(int x, int y, const char *fmt, va_list ap) { - attron(COLOR_PAIR(1)); + upd_color(); + attron(COLOR_PAIR(cur_pair)); move(y, x); vw_printw(stdscr, fmt, ap); - attroff(COLOR_PAIR(1)); + attroff(COLOR_PAIR(cur_pair)); } @@ -94,7 +105,8 @@ void tg_rect(const char *label, int x, int y, int xsz, int ysz, unsigned int fla { int i; - attron(COLOR_PAIR(1)); + upd_color(); + attron(COLOR_PAIR(cur_pair)); for(i=0; i= COLORS) { + return; + } + i = num_colors++; + cur_pair = num_colors; + + colors[i].fg = fgcol; + colors[i].bg = bgcol; + colors[i].pair = cur_pair; + init_pair(cur_pair, fgcol, bgcol); +}