mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-10 05:33:51 -04: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);
|
cairo_fill(buf->cairo);
|
||||||
wl_surface_damage_buffer(c->wl.surface, x, y, width, height);
|
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
|
static void
|
||||||
|
|
@ -362,18 +348,19 @@ grid_render_scroll_reverse(struct context *c, struct buffer *buf,
|
||||||
static void
|
static void
|
||||||
grid_render(struct context *c)
|
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 &&
|
if (tll_length(c->term.grid->damage) == 0 &&
|
||||||
tll_length(c->term.grid->scroll_damage) == 0)
|
tll_length(c->term.grid->scroll_damage) == 0)
|
||||||
{
|
{
|
||||||
return;
|
goto render_cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(c->width > 0);
|
assert(c->width > 0);
|
||||||
assert(c->height > 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) {
|
tll_foreach(c->term.grid->scroll_damage, it) {
|
||||||
switch (it->item.type) {
|
switch (it->item.type) {
|
||||||
|
|
@ -408,6 +395,29 @@ grid_render(struct context *c)
|
||||||
tll_remove(c->term.grid->damage, it);
|
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;
|
c->term.grid->offset %= c->term.grid->size;
|
||||||
|
|
||||||
//cairo_surface_flush(buf->cairo_surface);
|
//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;
|
int new_linear = row * term->cols + col;
|
||||||
assert(new_linear < term->rows * term->cols);
|
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->print_needs_wrap = false;
|
||||||
|
|
||||||
term->cursor.linear = new_linear;
|
term->cursor.linear = new_linear;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue