Skip to content

Commit

Permalink
replace UiTerm with Ui & delete function pointers
Browse files Browse the repository at this point in the history
  • Loading branch information
rnpnr committed May 18, 2024
1 parent 2e76404 commit a734cb9
Show file tree
Hide file tree
Showing 13 changed files with 188 additions and 333 deletions.
2 changes: 1 addition & 1 deletion event-basic.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
bool vis_event_emit(Vis *vis, enum VisEvents id, ...) {
if (!vis->initialized) {
vis->initialized = true;
vis->ui->init(vis->ui, vis);
ui_init(vis->ui, vis);
}

va_list ap;
Expand Down
6 changes: 3 additions & 3 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include <sys/stat.h>
#include <sys/types.h>

#include "ui-terminal.h"
#include "ui.h"
#include "vis.h"
#include "vis-lua.h"
#include "text-util.h"
Expand Down Expand Up @@ -1229,7 +1229,7 @@ static const char *macro_replay(Vis *vis, const char *keys, const Arg *arg) {
}

static const char *suspend(Vis *vis, const char *keys, const Arg *arg) {
vis_suspend(vis);
ui_terminal_suspend(vis->ui);
return keys;
}

Expand Down Expand Up @@ -2214,7 +2214,7 @@ static void signal_handler(int signum, siginfo_t *siginfo, void *context) {
}

int main(int argc, char *argv[]) {
vis = vis_new(ui_term_new());
vis = vis_new(ui_terminal_new());
if (!vis)
return EXIT_FAILURE;

Expand Down
42 changes: 15 additions & 27 deletions ui-terminal-curses.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,6 @@

#define UI_TERMKEY_FLAGS (TERMKEY_FLAG_UTF8|TERMKEY_FLAG_NOTERMIOS)

#define ui_term_backend_init ui_curses_init
#define ui_term_backend_blit ui_curses_blit
#define ui_term_backend_clear ui_curses_clear
#define ui_term_backend_colors ui_curses_colors
#define ui_term_backend_resize ui_curses_resize
#define ui_term_backend_restore ui_curses_restore
#define ui_term_backend_save ui_curses_save
#define ui_term_backend_new ui_curses_new
#define ui_term_backend_resume ui_curses_resume
#define ui_term_backend_suspend ui_curses_suspend
#define ui_term_backend_free ui_curses_free

#define CELL_COLOR_BLACK COLOR_BLACK
#define CELL_COLOR_RED COLOR_RED
#define CELL_COLOR_GREEN COLOR_GREEN
Expand Down Expand Up @@ -85,7 +73,7 @@ static void undo_palette(void)
}

/* Work out the nearest color from the 256 color set, or perhaps exactly. */
static CellColor color_rgb(UiTerm *ui, uint8_t r, uint8_t g, uint8_t b)
static CellColor color_rgb(Ui *ui, uint8_t r, uint8_t g, uint8_t b)
{
static short color_clobber_idx = 0;
static uint32_t clobbering_colors[MAX_COLOR_CLOBBER];
Expand Down Expand Up @@ -163,7 +151,7 @@ static CellColor color_rgb(UiTerm *ui, uint8_t r, uint8_t g, uint8_t b)
return i;
}

static CellColor color_terminal(UiTerm *ui, uint8_t index) {
static CellColor color_terminal(Ui *ui, uint8_t index) {
return index;
}

Expand Down Expand Up @@ -227,7 +215,7 @@ static inline attr_t style_to_attr(CellStyle *style) {
return style->attr | COLOR_PAIR(color_pair_get(style->fg, style->bg));
}

static void ui_curses_blit(UiTerm *tui) {
static void ui_term_backend_blit(Ui *tui) {
int w = tui->width, h = tui->height;
Cell *cell = tui->cells;
for (int y = 0; y < h; y++) {
Expand All @@ -242,16 +230,16 @@ static void ui_curses_blit(UiTerm *tui) {
doupdate();
}

static void ui_curses_clear(UiTerm *tui) {
static void ui_term_backend_clear(Ui *tui) {
clear();
}

static bool ui_curses_resize(UiTerm *tui, int width, int height) {
static bool ui_term_backend_resize(Ui *tui, int width, int height) {
return resizeterm(height, width) == OK &&
wresize(stdscr, height, width) == OK;
}

static void ui_curses_save(UiTerm *tui, bool fscr) {
static void ui_term_backend_save(Ui *tui, bool fscr) {
curs_set(1);
if (fscr) {
def_prog_mode();
Expand All @@ -261,17 +249,17 @@ static void ui_curses_save(UiTerm *tui, bool fscr) {
}
}

static void ui_curses_restore(UiTerm *tui) {
static void ui_term_backend_restore(Ui *tui) {
reset_prog_mode();
wclear(stdscr);
curs_set(0);
}

static int ui_curses_colors(Ui *ui) {
int ui_terminal_colors(void) {
return COLORS;
}

static bool ui_curses_init(UiTerm *tui, char *term) {
static bool ui_term_backend_init(Ui *tui, char *term) {
if (!newterm(term, stderr, stdin)) {
snprintf(tui->info, sizeof(tui->info), "Warning: unknown term `%s'", term);
if (!newterm(strstr(term, "-256color") ? "xterm-256color" : "xterm", stderr, stdin))
Expand All @@ -288,19 +276,19 @@ static bool ui_curses_init(UiTerm *tui, char *term) {
return true;
}

static UiTerm *ui_curses_new(void) {
return calloc(1, sizeof(UiTerm));
static Ui *ui_term_backend_new(void) {
return calloc(1, sizeof(Ui));
}

static void ui_curses_resume(UiTerm *term) { }
void ui_terminal_resume(Ui *term) { }

static void ui_curses_suspend(UiTerm *term) {
static void ui_term_backend_suspend(Ui *term) {
if (change_colors == 1)
undo_palette();
}

static void ui_curses_free(UiTerm *term) {
ui_curses_suspend(term);
static void ui_term_backend_free(Ui *term) {
ui_term_backend_suspend(term);
endwin();
}

Expand Down
46 changes: 17 additions & 29 deletions ui-terminal-vt100.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,6 @@

#define UI_TERMKEY_FLAGS TERMKEY_FLAG_UTF8

#define ui_term_backend_init ui_vt100_init
#define ui_term_backend_blit ui_vt100_blit
#define ui_term_backend_clear ui_vt100_clear
#define ui_term_backend_colors ui_vt100_colors
#define ui_term_backend_resize ui_vt100_resize
#define ui_term_backend_save ui_vt100_save
#define ui_term_backend_restore ui_vt100_restore
#define ui_term_backend_suspend ui_vt100_suspend
#define ui_term_backend_resume ui_vt100_resume
#define ui_term_backend_new ui_vt100_new
#define ui_term_backend_free ui_vt100_free

#define CELL_COLOR_BLACK { .index = 0 }
#define CELL_COLOR_RED { .index = 1 }
#define CELL_COLOR_GREEN { .index = 2 }
Expand All @@ -72,7 +60,7 @@
#define CELL_ATTR_DIM (1 << 5)

typedef struct {
UiTerm uiterm;
Ui uiterm;
Buffer buf;
} UiVt100;

Expand All @@ -82,11 +70,11 @@ static inline bool cell_color_equal(CellColor c1, CellColor c2) {
return c1.r == c2.r && c1.g == c2.g && c1.b == c2.b;
}

static CellColor color_rgb(UiTerm *ui, uint8_t r, uint8_t g, uint8_t b) {
static CellColor color_rgb(Ui *ui, uint8_t r, uint8_t g, uint8_t b) {
return (CellColor){ .r = r, .g = g, .b = b, .index = (uint8_t)-1 };
}

static CellColor color_terminal(UiTerm *ui, uint8_t index) {
static CellColor color_terminal(Ui *ui, uint8_t index) {
return (CellColor){ .r = 0, .g = 0, .b = 0, .index = index };
}

Expand All @@ -108,7 +96,7 @@ static void cursor_visible(bool visible) {
output_literal(visible ? "\x1b[?25h" : "\x1b[?25l");
}

static void ui_vt100_blit(UiTerm *tui) {
static void ui_term_backend_blit(Ui *tui) {
Buffer *buf = &((UiVt100*)tui)->buf;
buffer_clear(buf);
CellAttr attr = CELL_ATTR_NORMAL;
Expand Down Expand Up @@ -174,54 +162,54 @@ static void ui_vt100_blit(UiTerm *tui) {
output(buffer_content(buf), buffer_length0(buf));
}

static void ui_vt100_clear(UiTerm *tui) { }
static void ui_term_backend_clear(Ui *tui) { }

static bool ui_vt100_resize(UiTerm *tui, int width, int height) {
static bool ui_term_backend_resize(Ui *tui, int width, int height) {
return true;
}

static void ui_vt100_save(UiTerm *tui, bool fscr) {
static void ui_term_backend_save(Ui *tui, bool fscr) {
cursor_visible(true);
}

static void ui_vt100_restore(UiTerm *tui) {
static void ui_term_backend_restore(Ui *tui) {
cursor_visible(false);
}

static int ui_vt100_colors(Ui *ui) {
int ui_terminal_colors(void) {
char *term = getenv("TERM");
return (term && strstr(term, "-256color")) ? 256 : 16;
}

static void ui_vt100_suspend(UiTerm *tui) {
static void ui_term_backend_suspend(Ui *tui) {
if (!tui->termkey) return;
termkey_stop(tui->termkey);
cursor_visible(true);
screen_alternate(false);
}

static void ui_vt100_resume(UiTerm *tui) {
void ui_terminal_resume(Ui *tui) {
screen_alternate(true);
cursor_visible(false);
termkey_start(tui->termkey);
}

static bool ui_vt100_init(UiTerm *tui, char *term) {
ui_vt100_resume(tui);
static bool ui_term_backend_init(Ui *tui, char *term) {
ui_terminal_resume(tui);
return true;
}

static UiTerm *ui_vt100_new(void) {
static Ui *ui_term_backend_new(void) {
UiVt100 *vtui = calloc(1, sizeof *vtui);
if (!vtui)
return NULL;
buffer_init(&vtui->buf);
return (UiTerm*)vtui;
return (Ui*)vtui;
}

static void ui_vt100_free(UiTerm *tui) {
static void ui_term_backend_free(Ui *tui) {
UiVt100 *vtui = (UiVt100*)tui;
ui_vt100_suspend(tui);
ui_term_backend_suspend(tui);
buffer_release(&vtui->buf);
}

Expand Down
Loading

0 comments on commit a734cb9

Please sign in to comment.