mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
Merge branch 'master' into sixel-performance
This commit is contained in:
commit
fad5838dba
4 changed files with 46 additions and 8 deletions
11
CHANGELOG.md
11
CHANGELOG.md
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
* Background transparency to only be used with the default background
|
* Background transparency to only be used with the default background
|
||||||
color.
|
color.
|
||||||
* Copy to clipboard/primary selection to insert a line break if either
|
* Copy-to-clipboard/primary-selection to insert a line break if either
|
||||||
the last cell on the previous line or the first cell on the next
|
the last cell on the previous line or the first cell on the next
|
||||||
line is empty.
|
line is empty.
|
||||||
* Number of lines to scroll is now always clamped to the number of
|
* Number of lines to scroll is now always clamped to the number of
|
||||||
|
|
@ -36,6 +36,9 @@
|
||||||
debug logging has been enabled.
|
debug logging has been enabled.
|
||||||
* OSC 4 (_Set Color_) now updates already rendered cells, excluding
|
* OSC 4 (_Set Color_) now updates already rendered cells, excluding
|
||||||
scrollback.
|
scrollback.
|
||||||
|
* Mouse cursor from `hand2` to `left_ptr` when client is capturing the
|
||||||
|
mouse.
|
||||||
|
* Sixel images are now removed when the font size is **decreased**.
|
||||||
|
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
@ -43,7 +46,7 @@
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
* Do not stop an ongoing selection when `shift` is released. When the
|
* Do not stop an ongoing selection when `shift` is released. When the
|
||||||
client application is capturing mouse events, one must hold down
|
client application is capturing the mouse, one must hold down
|
||||||
`shift` to start a selection. This selection is now finalized only
|
`shift` to start a selection. This selection is now finalized only
|
||||||
when the mouse button is released - not as soon as `shift` is
|
when the mouse button is released - not as soon as `shift` is
|
||||||
released.
|
released.
|
||||||
|
|
@ -51,12 +54,12 @@
|
||||||
* Rare crash when scrolling and the new viewport ended up **exactly**
|
* Rare crash when scrolling and the new viewport ended up **exactly**
|
||||||
on the wrap around.
|
on the wrap around.
|
||||||
* Selection handling when viewport wrapped around.
|
* Selection handling when viewport wrapped around.
|
||||||
* Restore signal mask in the slave process.
|
* Restore signal mask in the client process.
|
||||||
* Set `IUTF8`.
|
* Set `IUTF8`.
|
||||||
* Selection of double-width characters. It is no longer possible to
|
* Selection of double-width characters. It is no longer possible to
|
||||||
select half of a double-width character.
|
select half of a double-width character.
|
||||||
* Draw hollow block cursor on top of character.
|
* Draw hollow block cursor on top of character.
|
||||||
* Set an initial `TIOCSWINSZ`. This ensures clients never reads a
|
* Set an initial `TIOCSWINSZ`. This ensures clients never read a
|
||||||
`0x0` terminal size (https://codeberg.org/dnkl/foot/issues/20).
|
`0x0` terminal size (https://codeberg.org/dnkl/foot/issues/20).
|
||||||
* Glyphs overflowing into surrounding cells
|
* Glyphs overflowing into surrounding cells
|
||||||
(https://codeberg.org/dnkl/foot/issues/21).
|
(https://codeberg.org/dnkl/foot/issues/21).
|
||||||
|
|
|
||||||
11
sixel.c
11
sixel.c
|
|
@ -66,6 +66,17 @@ sixel_destroy(struct sixel *sixel)
|
||||||
sixel->data = NULL;
|
sixel->data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sixel_destroy_all(struct terminal *term)
|
||||||
|
{
|
||||||
|
tll_foreach(term->normal.sixel_images, it)
|
||||||
|
sixel_destroy(&it->item);
|
||||||
|
tll_foreach(term->alt.sixel_images, it)
|
||||||
|
sixel_destroy(&it->item);
|
||||||
|
tll_free(term->normal.sixel_images);
|
||||||
|
tll_free(term->alt.sixel_images);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sixel_erase(struct terminal *term, struct sixel *sixel)
|
sixel_erase(struct terminal *term, struct sixel *sixel)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
1
sixel.h
1
sixel.h
|
|
@ -11,6 +11,7 @@ void sixel_put(struct terminal *term, uint8_t c);
|
||||||
void sixel_unhook(struct terminal *term);
|
void sixel_unhook(struct terminal *term);
|
||||||
|
|
||||||
void sixel_destroy(struct sixel *sixel);
|
void sixel_destroy(struct sixel *sixel);
|
||||||
|
void sixel_destroy_all(struct terminal *term);
|
||||||
|
|
||||||
void sixel_scroll_up(struct terminal *term, int rows);
|
void sixel_scroll_up(struct terminal *term, int rows);
|
||||||
void sixel_scroll_down(struct terminal *term, int rows);
|
void sixel_scroll_down(struct terminal *term, int rows);
|
||||||
|
|
|
||||||
31
terminal.c
31
terminal.c
|
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
static const char *const XCURSOR_LEFT_PTR = "left_ptr";
|
static const char *const XCURSOR_LEFT_PTR = "left_ptr";
|
||||||
static const char *const XCURSOR_TEXT = "text";
|
static const char *const XCURSOR_TEXT = "text";
|
||||||
static const char *const XCURSOR_HAND2 = "hand2";
|
//static const char *const XCURSOR_HAND2 = "hand2";
|
||||||
|
|
||||||
bool
|
bool
|
||||||
term_to_slave(struct terminal *term, const void *_data, size_t len)
|
term_to_slave(struct terminal *term, const void *_data, size_t len)
|
||||||
|
|
@ -1423,7 +1423,30 @@ term_font_size_adjust(struct terminal *term, double amount)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
term_set_fonts(term, (struct fcft_font *[]){data[0].font_out, data[1].font_out, data[2].font_out, data[3].font_out});
|
const int old_cell_width = term->cell_width;
|
||||||
|
const int old_cell_height = term->cell_height;
|
||||||
|
|
||||||
|
if (!term_set_fonts(term, (struct fcft_font *[]){data[0].font_out, data[1].font_out, data[2].font_out, data[3].font_out}))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (term->cell_width < old_cell_width ||
|
||||||
|
term->cell_height < old_cell_height)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The cell size has decreased.
|
||||||
|
*
|
||||||
|
* This means sixels, which we cannot resize, no longer fit
|
||||||
|
* into their "allocated" grid space.
|
||||||
|
*
|
||||||
|
* To be able to fit them, we would have to change the grid
|
||||||
|
* content. Inserting empty lines _might_ seem acceptable, but
|
||||||
|
* we'd also need to insert empty columns, which would break
|
||||||
|
* existing layout completely.
|
||||||
|
*
|
||||||
|
* So we delete them.
|
||||||
|
*/
|
||||||
|
sixel_destroy_all(term);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2206,9 +2229,9 @@ void
|
||||||
term_xcursor_update(struct terminal *term)
|
term_xcursor_update(struct terminal *term)
|
||||||
{
|
{
|
||||||
term->xcursor =
|
term->xcursor =
|
||||||
term->is_searching ? XCURSOR_LEFT_PTR :
|
term->is_searching ? XCURSOR_LEFT_PTR : /* TODO: something different? */
|
||||||
selection_enabled(term) ? XCURSOR_TEXT :
|
selection_enabled(term) ? XCURSOR_TEXT :
|
||||||
XCURSOR_HAND2;
|
XCURSOR_LEFT_PTR;
|
||||||
|
|
||||||
render_xcursor_set(term);
|
render_xcursor_set(term);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue