aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2017-03-16 21:53:42 +0100
committerMarc André Tanner <mat@brain-dump.org>2017-03-16 22:51:55 +0100
commitc6557f5e8778dc7adf867c74b30c8cbe5951be66 (patch)
tree57e0c7a2e4da960f880feb8b874c68a62e73a319
parent1b68cf418d8a3b97a68b46faf09d3dd84e8dd3ed (diff)
downloadvis-c6557f5e8778dc7adf867c74b30c8cbe5951be66.tar.gz
vis-c6557f5e8778dc7adf867c74b30c8cbe5951be66.tar.xz
ui: further cleanup display code
-rw-r--r--ui-terminal-curses.c6
-rw-r--r--ui-terminal-vt100.c4
-rw-r--r--ui-terminal.c49
-rw-r--r--ui.h1
-rw-r--r--vis.c3
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) {