From 272e944a136fb6c9592ca670ff085c036b519841 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 16 Nov 2023 13:18:50 +0530 Subject: [PATCH] DRYer --- kitty/screen.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/kitty/screen.c b/kitty/screen.c index 1d6fe4dce..5e05d09a9 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -602,6 +602,12 @@ draw_second_flag_codepoint(Screen *self, char_type ch) { return true; } +static void +zero_cells(text_loop_state *s, CPUCell *c, GPUCell *g) { + memcpy(c, &s->cc, sizeof(s->cc)); + memcpy(g, &s->g, sizeof(s->g)); +} + static void draw_combining_char(Screen *self, text_loop_state *s, char_type ch) { bool has_prev_char = false; @@ -625,8 +631,7 @@ draw_combining_char(Screen *self, text_loop_state *s, char_type ch) { if (gpu_cell->attrs.width != 2 && cpu_cell->cc_idx[0] == VS16 && is_emoji_presentation_base(cpu_cell->ch)) { gpu_cell->attrs.width = 2; if (xpos + 1 < self->columns) { - memcpy(cp + xpos + 1, &s->cc, sizeof(s->cc)); - memcpy(gp + xpos + 1, &s->g, sizeof(s->g)); + zero_cells(s, cp + xpos + 1, gp + xpos + 1); gp[xpos + 1].attrs.width = 0; self->cursor->x++; } else move_widened_char(self, s, cpu_cell, gpu_cell, xpos, ypos); @@ -660,11 +665,9 @@ screen_on_input(Screen *self) { static void ensure_cursor_not_on_wide_char_trailer_for_insert(Screen *self, text_loop_state *s) { if (UNLIKELY(self->cursor->x > 0 && s->gp[self->cursor->x - 1].attrs.width == 2)) { - memcpy(s->gp + self->cursor->x - 1, &s->g, sizeof(s->g)); - memcpy(s->cp + self->cursor->x - 1, &s->cc, sizeof(s->cc)); + zero_cells(s, s->cp + self->cursor->x - 1, s->gp + self->cursor->x - 1); s->cp[self->cursor->x-1].ch = ' '; - memcpy(s->gp + self->cursor->x, &s->g, sizeof(s->g)); - memcpy(s->cp + self->cursor->x, &s->cc, sizeof(s->cc)); + zero_cells(s, s->cp + self->cursor->x, s->gp + self->cursor->x); } } @@ -707,14 +710,12 @@ draw_text_loop(Screen *self, const uint32_t *chars, size_t num_chars, text_loop_ linebuf_set_line_has_image_placeholders(self->linebuf, self->cursor->y, true); s->image_placeholder_marked = true; } - memcpy(s->gp + self->cursor->x, &s->g, sizeof(s->g)); - memcpy(s->cp + self->cursor->x, &s->cc, sizeof(s->cc)); + zero_cells(s, s->cp + self->cursor->x, s->gp + self->cursor->x); s->cp[self->cursor->x].ch = ch; self->cursor->x++; if (char_width == 2) { s->gp[self->cursor->x-1].attrs.width = 2; - memcpy(s->gp + self->cursor->x, &s->g, sizeof(s->g)); - memcpy(s->cp + self->cursor->x, &s->cc, sizeof(s->cc)); + zero_cells(s, s->cp + self->cursor->x, s->gp + self->cursor->x); s->gp[self->cursor->x].attrs.width = 0; self->cursor->x++; }