From 98bd798daed897c56b6f0262e5105131a074bdad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 3 Dec 2020 18:37:40 +0100 Subject: [PATCH] ime: calculate wchar widths once --- ime.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ime.c b/ime.c index ccdbb098..bde063a8 100644 --- a/ime.c +++ b/ime.c @@ -181,8 +181,13 @@ done(void *data, struct zwp_text_input_v3 *zwp_text_input_v3, /* Next, count number of cells needed */ size_t cell_count = 0; - for (size_t i = 0; i < wchars; i++) - cell_count += max(wcwidth(wcs[i]), 1); + size_t widths[wchars + 1]; + + for (size_t i = 0; i < wchars; i++) { + int width = max(wcwidth(wcs[i]), 1); + widths[i] = width; + cell_count += width; + } /* Allocate cells */ term->ime.preedit.cells = xmalloc( @@ -193,7 +198,7 @@ done(void *data, struct zwp_text_input_v3 *zwp_text_input_v3, for (size_t i = 0, cell_idx = 0; i < wchars; i++) { struct cell *cell = &term->ime.preedit.cells[cell_idx]; - int width = max(wcwidth(wcs[i]), 1); + int width = widths[i]; cell->wc = wcs[i]; cell->attrs = (struct attributes){.clean = 0, .underline = 1};