ime: render pre-edit text

This is done by allocating cells for the pre-edit text when receiving
the text-input::done() call, and populating them by converting the
utf-8 formatted pre-edit text to wchars.

We also convert the pre-edit cursor position to cell positions (it can
cover multiple cells).

When rendering, we simply render the pre-edit cells on-top off the
regular grid. While doing so, we also mark the underlying, “real”,
cells as dirty, to ensure they are re-rendered when the pre-edit text
is modified or removed.
This commit is contained in:
Daniel Eklöf 2020-12-02 18:52:50 +01:00
parent 5745c610ac
commit 8c3d48c5cd
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
8 changed files with 364 additions and 60 deletions

View file

@ -15,6 +15,9 @@
#include "fdm.h"
/* Forward declarations */
struct terminal;
typedef tll(xkb_keycode_t) xkb_keycode_list_t;
struct key_binding {
@ -225,18 +228,24 @@ struct seat {
struct zwp_text_input_v3 *wl_text_input;
struct {
struct {
char *text;
int32_t cursor_begin;
int32_t cursor_end;
struct {
char *text;
int32_t cursor_begin;
int32_t cursor_end;
} pending;
} preedit;
struct {
char *text;
struct {
char *text;
} pending;
} commit;
struct {
uint32_t before_length;
uint32_t after_length;
struct {
uint32_t before_length;
uint32_t after_length;
} pending;
} surrounding;
uint32_t serial;