terminal/screen: add cursor rendering
This is the most simple way to render cursors: flip attr->inverse of the cursor cell. This causes the background and foreground colors of the cursor-cell to be inversed. Now that we render cursors ourselves, make subterm not call into the parent terminal to render cursors.
This commit is contained in:
parent
2ea8d19b21
commit
cad8fe9a2b
|
@ -286,6 +286,8 @@ static Output *output_free(Output *o) {
|
|||
if (!o)
|
||||
return NULL;
|
||||
|
||||
/* re-enable cursor */
|
||||
output_printf(o, "\e[?25h");
|
||||
/* disable alternate screen buffer */
|
||||
output_printf(o, "\e[?1049l");
|
||||
output_flush(o);
|
||||
|
@ -317,6 +319,11 @@ static int output_new(Output **out, int fd) {
|
|||
if (r < 0)
|
||||
goto error;
|
||||
|
||||
/* always hide cursor */
|
||||
r = output_printf(o, "\e[?25l");
|
||||
if (r < 0)
|
||||
goto error;
|
||||
|
||||
r = output_flush(o);
|
||||
if (r < 0)
|
||||
goto error;
|
||||
|
@ -539,10 +546,6 @@ static void output_draw(Output *o, bool menu, term_screen *screen) {
|
|||
else
|
||||
output_draw_screen(o, screen);
|
||||
|
||||
/* show cursor */
|
||||
if (!(screen->flags & TERM_FLAG_HIDE_CURSOR))
|
||||
output_printf(o, "\e[?25h");
|
||||
|
||||
/*
|
||||
* Hack: sd-term was not written to support TTY as output-objects, thus
|
||||
* expects callers to use term_screen_feed_keyboard(). However, we
|
||||
|
|
|
@ -4246,6 +4246,8 @@ int term_screen_draw(term_screen *screen,
|
|||
line_age = MAX(line->age, page->age);
|
||||
|
||||
for (i = 0; i < page->width; ++i) {
|
||||
term_attr attr;
|
||||
|
||||
cell = &line->cells[i];
|
||||
cell_age = MAX(cell->age, line_age);
|
||||
|
||||
|
@ -4259,11 +4261,16 @@ int term_screen_draw(term_screen *screen,
|
|||
* renderers can assume ch_width is set properpy. */
|
||||
cw = MAX(cell->cwidth, 1U);
|
||||
|
||||
attr = cell->attr;
|
||||
if (i == screen->cursor_x && j == screen->cursor_y &&
|
||||
!(screen->flags & TERM_FLAG_HIDE_CURSOR))
|
||||
attr.inverse ^= 1;
|
||||
|
||||
r = draw_fn(screen,
|
||||
userdata,
|
||||
i,
|
||||
j,
|
||||
&cell->attr,
|
||||
&attr,
|
||||
ch_str,
|
||||
ch_n,
|
||||
cw);
|
||||
|
|
Loading…
Reference in a new issue