mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-04 04:06:06 -05:00
sixel: implement P2=1 - transparent pixels
When P2=1, empty pixels are transparent. This patch also changes the behavior of P2=0|2, from setting empty pixels to the default background color, to instead use the *current* background color. To implement this, a couple of changes are needed: * Sixel pixels always use alpha=1.0, except for *empty* cells when P2=1 (i.e. transparent pixels). * The renderer draws sixels with the OVER operator, instead of the SRC operator. * The renderer *must* now render the cells beneath the sixel. As an optimization, this is only done for sixels where P2=1. I.e. for fully opaque sixels, there’s no need to render the cells beneath. The sixel renderer isn’t yet hooked into the multi-threaded renderer. This means *rows* (not just the cells) beneath maybe-transparent sixels are rendered single-threaded. Closes #391.
This commit is contained in:
parent
5650120e08
commit
7d315d7bf9
5 changed files with 91 additions and 50 deletions
9
dcs.c
9
dcs.c
|
|
@ -42,12 +42,17 @@ dcs_hook(struct terminal *term, uint8_t final)
|
|||
switch (term->vt.private) {
|
||||
case 0:
|
||||
switch (final) {
|
||||
case 'q':
|
||||
sixel_init(term);
|
||||
case 'q': {
|
||||
int p1 = vt_param_get(term, 0, 0);
|
||||
int p2 = vt_param_get(term, 1,0);
|
||||
int p3 = vt_param_get(term, 2, 0);
|
||||
|
||||
sixel_init(term, p1, p2, p3);
|
||||
term->vt.dcs.put_handler = &sixel_put;
|
||||
term->vt.dcs.unhook_handler = &sixel_unhook;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case '=':
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue