mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
render: always render cursor
This commit is contained in:
parent
7e4dd2de9a
commit
dfc9554e89
2 changed files with 27 additions and 19 deletions
44
main.c
44
main.c
|
|
@ -260,20 +260,6 @@ grid_render_erase(struct context *c, struct buffer *buf, const struct damage *dm
|
|||
cairo_fill(buf->cairo);
|
||||
wl_surface_damage_buffer(c->wl.surface, x, y, width, height);
|
||||
}
|
||||
|
||||
/* Redraw cursor, if it's inside the erased range */
|
||||
if (c->term.cursor.linear >= dmg->range.start - c->term.grid->offset &&
|
||||
c->term.cursor.linear < dmg->range.start - c->term.grid->offset + dmg->range.length)
|
||||
{
|
||||
grid_render_update(
|
||||
c, buf,
|
||||
&(struct damage){
|
||||
.type = DAMAGE_UPDATE,
|
||||
.range = {
|
||||
.start = c->term.grid->offset + c->term.cursor.linear,
|
||||
.length = 1}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -362,18 +348,19 @@ grid_render_scroll_reverse(struct context *c, struct buffer *buf,
|
|||
static void
|
||||
grid_render(struct context *c)
|
||||
{
|
||||
struct buffer *buf = shm_get_buffer(c->wl.shm, c->width, c->height);
|
||||
cairo_set_operator(buf->cairo, CAIRO_OPERATOR_SOURCE);
|
||||
|
||||
if (tll_length(c->term.grid->damage) == 0 &&
|
||||
tll_length(c->term.grid->scroll_damage) == 0)
|
||||
{
|
||||
return;
|
||||
goto render_cursor;
|
||||
}
|
||||
|
||||
assert(c->width > 0);
|
||||
assert(c->height > 0);
|
||||
|
||||
struct buffer *buf = shm_get_buffer(c->wl.shm, c->width, c->height);
|
||||
|
||||
cairo_set_operator(buf->cairo, CAIRO_OPERATOR_SOURCE);
|
||||
|
||||
tll_foreach(c->term.grid->scroll_damage, it) {
|
||||
switch (it->item.type) {
|
||||
|
|
@ -408,6 +395,29 @@ grid_render(struct context *c)
|
|||
tll_remove(c->term.grid->damage, it);
|
||||
}
|
||||
|
||||
render_cursor:
|
||||
;
|
||||
|
||||
/* TODO: break out to function */
|
||||
/* Re-render last cursor cell and current cursor cell */
|
||||
static struct cursor last_cursor = {.linear = 0, .col = 0, .row = 0};
|
||||
|
||||
if (last_cursor.linear != c->term.cursor.linear) {
|
||||
struct damage prev_cursor = {
|
||||
.type = DAMAGE_UPDATE,
|
||||
.range = {.start = c->term.grid->offset + last_cursor.linear,
|
||||
.length = 1},
|
||||
};
|
||||
grid_render_update(c, buf, &prev_cursor);
|
||||
}
|
||||
|
||||
struct damage cursor = {
|
||||
.type = DAMAGE_UPDATE,
|
||||
.range = {.start = c->term.grid->offset + c->term.cursor.linear, .length = 1},
|
||||
};
|
||||
grid_render_update(c, buf, &cursor);
|
||||
last_cursor = c->term.cursor;
|
||||
|
||||
c->term.grid->offset %= c->term.grid->size;
|
||||
|
||||
//cairo_surface_flush(buf->cairo_surface);
|
||||
|
|
|
|||
|
|
@ -156,8 +156,6 @@ term_cursor_to(struct terminal *term, int row, int col)
|
|||
int new_linear = row * term->cols + col;
|
||||
assert(new_linear < term->rows * term->cols);
|
||||
|
||||
term_damage_update(term, term->cursor.linear, 1);
|
||||
term_damage_update(term, new_linear, 1);
|
||||
term->print_needs_wrap = false;
|
||||
|
||||
term->cursor.linear = new_linear;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue