X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-terminal%2Fterm.h;h=eae6c6352f911ac0ae8c6c5089aedf33a7d3a0bf;hb=be795898c0d2fa21e3389b89793dcd45c47f8b9f;hp=021cf1c42bb3e64c45e232ad79a4405bf0b408d6;hpb=dda57d9143644d39091207b287f142f91f55d0ad;p=elogind.git diff --git a/src/libsystemd-terminal/term.h b/src/libsystemd-terminal/term.h index 021cf1c42..eae6c6352 100644 --- a/src/libsystemd-terminal/term.h +++ b/src/libsystemd-terminal/term.h @@ -97,6 +97,8 @@ struct term_attr { unsigned int hidden : 1; /* hidden */ }; +void term_attr_to_argb32(const term_attr *attr, uint32_t *fg, uint32_t *bg, const uint8_t *palette); + /* * UTF-8 */ @@ -111,7 +113,7 @@ struct term_utf8 { }; size_t term_utf8_encode(char *out_utf8, uint32_t g); -const uint32_t *term_utf8_decode(term_utf8 *p, size_t *out_len, char c); +size_t term_utf8_decode(term_utf8 *p, uint32_t **out_buf, char c); /* * Parsers @@ -128,6 +130,21 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(term_parser*, term_parser_free); * Screens */ +enum { + TERM_KBDMOD_IDX_SHIFT, + TERM_KBDMOD_IDX_CTRL, + TERM_KBDMOD_IDX_ALT, + TERM_KBDMOD_IDX_LINUX, + TERM_KBDMOD_IDX_CAPS, + TERM_KBDMOD_CNT, + + TERM_KBDMOD_SHIFT = 1 << TERM_KBDMOD_IDX_SHIFT, + TERM_KBDMOD_CTRL = 1 << TERM_KBDMOD_IDX_CTRL, + TERM_KBDMOD_ALT = 1 << TERM_KBDMOD_IDX_ALT, + TERM_KBDMOD_LINUX = 1 << TERM_KBDMOD_IDX_LINUX, + TERM_KBDMOD_CAPS = 1 << TERM_KBDMOD_IDX_CAPS, +}; + typedef int (*term_screen_write_fn) (term_screen *screen, void *userdata, const void *buf, size_t size); typedef int (*term_screen_cmd_fn) (term_screen *screen, void *userdata, unsigned int cmd, const term_seq *seq); @@ -139,11 +156,29 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(term_screen*, term_screen_unref); unsigned int term_screen_get_width(term_screen *screen); unsigned int term_screen_get_height(term_screen *screen); +uint64_t term_screen_get_age(term_screen *screen); int term_screen_feed_text(term_screen *screen, const uint8_t *in, size_t size); -int term_screen_feed_keyboard(term_screen *screen, uint32_t keysym, uint32_t ascii, uint32_t ucs4, unsigned int mods); +int term_screen_feed_keyboard(term_screen *screen, + const uint32_t *keysyms, + size_t n_syms, + uint32_t ascii, + const uint32_t *ucs4, + unsigned int mods); int term_screen_resize(term_screen *screen, unsigned int width, unsigned int height); void term_screen_soft_reset(term_screen *screen); void term_screen_hard_reset(term_screen *screen); int term_screen_set_answerback(term_screen *screen, const char *answerback); + +int term_screen_draw(term_screen *screen, + int (*draw_fn) (term_screen *screen, + void *userdata, + unsigned int x, + unsigned int y, + const term_attr *attr, + const uint32_t *ch, + size_t n_ch, + unsigned int ch_width), + void *userdata, + uint64_t *fb_age);