From c6557f5e8778dc7adf867c74b30c8cbe5951be66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Thu, 16 Mar 2017 21:53:42 +0100 Subject: ui: further cleanup display code --- ui-terminal-curses.c | 6 +++--- ui-terminal-vt100.c | 4 +++- ui-terminal.c | 49 ++++++++++++++++--------------------------------- ui.h | 1 - vis.c | 3 +-- 5 files changed, 23 insertions(+), 40 deletions(-) diff --git a/ui-terminal-curses.c b/ui-terminal-curses.c index e060c10..849c617 100644 --- a/ui-terminal-curses.c +++ b/ui-terminal-curses.c @@ -235,9 +235,9 @@ static void ui_curses_clear(UiTerm *tui) { clear(); } -static void ui_curses_resize(UiTerm *tui, int width, int height) { - resizeterm(height, width); - wresize(stdscr, height, width); +static bool ui_curses_resize(UiTerm *tui, int width, int height) { + return resizeterm(height, width) == OK && + wresize(stdscr, height, width) == OK; } static void ui_curses_save(UiTerm *tui) { diff --git a/ui-terminal-vt100.c b/ui-terminal-vt100.c index 85c1f2e..e786492 100644 --- a/ui-terminal-vt100.c +++ b/ui-terminal-vt100.c @@ -166,7 +166,9 @@ static void ui_vt100_blit(UiTerm *tui) { static void ui_vt100_clear(UiTerm *tui) { } -static void ui_vt100_resize(UiTerm *tui, int width, int height) { } +static bool ui_vt100_resize(UiTerm *tui, int width, int height) { + return true; +} static void ui_vt100_save(UiTerm *tui) { cursor_visible(true); diff --git a/ui-terminal.c b/ui-terminal.c index fd8e126..0f341e5 100644 --- a/ui-terminal.c +++ b/ui-terminal.c @@ -98,7 +98,6 @@ static void ui_window_move(UiTermWin *win, int x, int y) { win->y = y; } -/* Convert color from string. */ static bool color_fromstring(UiTerm *ui, CellColor *color, const char *s) { if (!s) @@ -122,7 +121,7 @@ static bool color_fromstring(UiTerm *ui, CellColor *color, const char *s) return true; } - struct { + static const struct { const char *name; CellColor color; } color_names[] = { @@ -345,11 +344,11 @@ static void ui_draw(Ui *ui) { debug("ui-draw\n"); UiTerm *tui = (UiTerm*)ui; ui_arrange(ui, tui->layout); - for (UiTermWin *win = tui->windows; win; win = win->next) ui_window_draw((UiWin*)win); if (tui->info[0]) ui_draw_string(tui, 0, tui->height-1, tui->info, NULL, UI_STYLE_INFO); + ui_term_backend_blit(tui); } static void ui_redraw(Ui *ui) { @@ -359,44 +358,33 @@ static void ui_redraw(Ui *ui) { view_dirty(win->win->view); } -static bool ui_resize_to(Ui *ui, int width, int height) { +static void ui_resize(Ui *ui) { UiTerm *tui = (UiTerm*)ui; + struct winsize ws; + int width = 80, height = 24; + + if (ioctl(STDERR_FILENO, TIOCGWINSZ, &ws) != -1) { + width = ws.ws_col; + height = ws.ws_row; + } + width = MAX(width, 1); width = MIN(width, MAX_WIDTH); height = MAX(height, 1); height = MIN(height, MAX_HEIGHT); - ui_term_backend_resize(tui, width, height); + if (!ui_term_backend_resize(tui, width, height)) + return; + size_t size = width*height*sizeof(Cell); if (size > tui->cells_size) { Cell *cells = realloc(tui->cells, size); if (!cells) - return false; + return; tui->cells_size = size; tui->cells = cells; } tui->width = width; tui->height = height; - ui_draw(ui); - return true; -} - -static void ui_resize(Ui *ui) { - struct winsize ws; - int width = 80, height = 24; - - if (ioctl(STDERR_FILENO, TIOCGWINSZ, &ws) != -1) { - width = ws.ws_col; - height = ws.ws_row; - } - - ui_resize_to(ui, width, height); -} - -static void ui_update(Ui *ui) { - debug("ui-doupdate\n"); - UiTerm *tui = (UiTerm*)ui; - ui_draw(ui); - ui_term_backend_blit(tui); } static void ui_window_free(UiWin *w) { @@ -448,7 +436,6 @@ static void ui_window_options_set(UiWin *w, enum UiOption options) { win->next = NULL; } } - ui_draw((Ui*)win->ui); } @@ -566,15 +553,12 @@ static void ui_info(Ui *ui, const char *msg, va_list ap) { UiTerm *tui = (UiTerm*)ui; ui_draw_line(tui, 0, tui->height-1, ' ', UI_STYLE_INFO); vsnprintf(tui->info, sizeof(tui->info), msg, ap); - ui_draw(ui); } static void ui_info_hide(Ui *ui) { UiTerm *tui = (UiTerm*)ui; - if (tui->info[0]) { + if (tui->info[0]) tui->info[0] = '\0'; - ui_draw(ui); - } } static TermKey *ui_termkey_new(int fd) { @@ -700,7 +684,6 @@ Ui *ui_term_new(void) { .suspend = ui_suspend, .resume = ui_resume, .resize = ui_resize, - .update = ui_update, .window_new = ui_window_new, .window_free = ui_window_free, .window_focus = ui_window_focus, diff --git a/ui.h b/ui.h index ee434fc..c2e9bf3 100644 --- a/ui.h +++ b/ui.h @@ -95,7 +95,6 @@ struct Ui { void (*arrange)(Ui*, enum UiLayout); void (*draw)(Ui*); void (*redraw)(Ui*); - void (*update)(Ui*); void (*suspend)(Ui*); void (*resume)(Ui*); bool (*getkey)(Ui*, TermKeyKey*); diff --git a/vis.c b/vis.c index a2b5b08..48ec9ba 100644 --- a/vis.c +++ b/vis.c @@ -589,7 +589,6 @@ int vis_window_height_get(const Win *win) { void vis_draw(Vis *vis) { for (Win *win = vis->windows; win; win = win->next) view_draw(win->view); - vis->ui->draw(vis->ui); } void vis_redraw(Vis *vis) { @@ -597,7 +596,7 @@ void vis_redraw(Vis *vis) { } void vis_update(Vis *vis) { - vis->ui->update(vis->ui); + vis->ui->draw(vis->ui); } void vis_suspend(Vis *vis) { -- cgit v1.2.3