api: generate ui events

This commit is contained in:
Björn Linse
2017-04-29 13:06:14 +02:00
parent d9023b84e6
commit 489d10c57c
10 changed files with 325 additions and 463 deletions

View File

@@ -49,8 +49,12 @@ static argv_callback uilog_event = NULL;
event_create(ui_bridge_##name##_event, argc, __VA_ARGS__), UI(ui))
#endif
#define INT2PTR(i) ((void *)(uintptr_t)i)
#define PTR2INT(p) ((int)(uintptr_t)p)
#define INT2PTR(i) ((void *)(intptr_t)i)
#define PTR2INT(p) ((Integer)(intptr_t)p)
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "ui_events_bridge.generated.h"
#endif
UI *ui_bridge_attach(UI *ui, ui_main_fn ui_main, event_scheduler scheduler)
{
@@ -146,148 +150,6 @@ static void ui_bridge_stop_event(void **argv)
ui->stop(ui);
}
static void ui_bridge_resize(UI *b, int width, int height)
{
UI_CALL(b, resize, 3, b, INT2PTR(width), INT2PTR(height));
}
static void ui_bridge_resize_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->resize(ui, PTR2INT(argv[1]), PTR2INT(argv[2]));
}
static void ui_bridge_clear(UI *b)
{
UI_CALL(b, clear, 1, b);
}
static void ui_bridge_clear_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->clear(ui);
}
static void ui_bridge_eol_clear(UI *b)
{
UI_CALL(b, eol_clear, 1, b);
}
static void ui_bridge_eol_clear_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->eol_clear(ui);
}
static void ui_bridge_cursor_goto(UI *b, int row, int col)
{
UI_CALL(b, cursor_goto, 3, b, INT2PTR(row), INT2PTR(col));
}
static void ui_bridge_cursor_goto_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->cursor_goto(ui, PTR2INT(argv[1]), PTR2INT(argv[2]));
}
static void ui_bridge_mode_info_set(UI *b, bool enabled, Array modes)
{
bool *enabledp = xmalloc(sizeof(*enabledp));
Object *modesp = xmalloc(sizeof(*modesp));
*enabledp = enabled;
*modesp = copy_object(ARRAY_OBJ(modes));
UI_CALL(b, mode_info_set, 3, b, enabledp, modesp);
}
static void ui_bridge_mode_info_set_event(void **argv)
{
UI *ui = UI(argv[0]);
bool *enabled = argv[1];
Object *modes = argv[2];
ui->mode_info_set(ui, *enabled, modes->data.array);
xfree(enabled);
api_free_object(*modes);
xfree(modes);
}
static void ui_bridge_update_menu(UI *b)
{
UI_CALL(b, update_menu, 1, b);
}
static void ui_bridge_update_menu_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->update_menu(ui);
}
static void ui_bridge_busy_start(UI *b)
{
UI_CALL(b, busy_start, 1, b);
}
static void ui_bridge_busy_start_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->busy_start(ui);
}
static void ui_bridge_busy_stop(UI *b)
{
UI_CALL(b, busy_stop, 1, b);
}
static void ui_bridge_busy_stop_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->busy_stop(ui);
}
static void ui_bridge_mouse_on(UI *b)
{
UI_CALL(b, mouse_on, 1, b);
}
static void ui_bridge_mouse_on_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->mouse_on(ui);
}
static void ui_bridge_mouse_off(UI *b)
{
UI_CALL(b, mouse_off, 1, b);
}
static void ui_bridge_mouse_off_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->mouse_off(ui);
}
static void ui_bridge_mode_change(UI *b, int mode_idx)
{
UI_CALL(b, mode_change, 2, b, INT2PTR(mode_idx));
}
static void ui_bridge_mode_change_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->mode_change(ui, PTR2INT(argv[1]));
}
static void ui_bridge_set_scroll_region(UI *b, int top, int bot, int left,
int right)
{
UI_CALL(b, set_scroll_region, 5, b, INT2PTR(top), INT2PTR(bot),
INT2PTR(left), INT2PTR(right));
}
static void ui_bridge_set_scroll_region_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->set_scroll_region(ui, PTR2INT(argv[1]), PTR2INT(argv[2]),
PTR2INT(argv[3]), PTR2INT(argv[4]));
}
static void ui_bridge_scroll(UI *b, int count)
{
UI_CALL(b, scroll, 2, b, INT2PTR(count));
}
static void ui_bridge_scroll_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->scroll(ui, PTR2INT(argv[1]));
}
static void ui_bridge_highlight_set(UI *b, HlAttrs attrs)
{
HlAttrs *a = xmalloc(sizeof(HlAttrs));
@@ -301,82 +163,6 @@ static void ui_bridge_highlight_set_event(void **argv)
xfree(argv[1]);
}
static void ui_bridge_put(UI *b, uint8_t *text, size_t size)
{
uint8_t *t = NULL;
if (text) {
t = xmalloc(sizeof(((UCell *)0)->data));
memcpy(t, text, size);
}
UI_CALL(b, put, 3, b, t, INT2PTR(size));
}
static void ui_bridge_put_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->put(ui, (uint8_t *)argv[1], (size_t)(uintptr_t)argv[2]);
xfree(argv[1]);
}
static void ui_bridge_bell(UI *b)
{
UI_CALL(b, bell, 1, b);
}
static void ui_bridge_bell_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->bell(ui);
}
static void ui_bridge_visual_bell(UI *b)
{
UI_CALL(b, visual_bell, 1, b);
}
static void ui_bridge_visual_bell_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->visual_bell(ui);
}
static void ui_bridge_update_fg(UI *b, int fg)
{
UI_CALL(b, update_fg, 2, b, INT2PTR(fg));
}
static void ui_bridge_update_fg_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->update_fg(ui, PTR2INT(argv[1]));
}
static void ui_bridge_update_bg(UI *b, int bg)
{
UI_CALL(b, update_bg, 2, b, INT2PTR(bg));
}
static void ui_bridge_update_bg_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->update_bg(ui, PTR2INT(argv[1]));
}
static void ui_bridge_update_sp(UI *b, int sp)
{
UI_CALL(b, update_sp, 2, b, INT2PTR(sp));
}
static void ui_bridge_update_sp_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->update_sp(ui, PTR2INT(argv[1]));
}
static void ui_bridge_flush(UI *b)
{
UI_CALL(b, flush, 1, b);
}
static void ui_bridge_flush_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->flush(ui);
}
static void ui_bridge_suspend(UI *b)
{
UIBridgeData *data = (UIBridgeData *)b;
@@ -394,25 +180,3 @@ static void ui_bridge_suspend_event(void **argv)
UI *ui = UI(argv[0]);
ui->suspend(ui);
}
static void ui_bridge_set_title(UI *b, char *title)
{
UI_CALL(b, set_title, 2, b, title ? xstrdup(title) : NULL);
}
static void ui_bridge_set_title_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->set_title(ui, argv[1]);
xfree(argv[1]);
}
static void ui_bridge_set_icon(UI *b, char *icon)
{
UI_CALL(b, set_icon, 2, b, icon ? xstrdup(icon) : NULL);
}
static void ui_bridge_set_icon_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->set_icon(ui, argv[1]);
xfree(argv[1]);
}