mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
sixel: set ‘col’ outside image boundaries when we’ve reached max height
This is to optimize sixel_add(). It already checks ‘pos’, to see if it needs to resize the image, and if the resize fails (either due to allocation failures, or because we’ve reached the maximum width), we bail out. We need to do the same thing for height. But, we don’t want to add another check to sixel_add() since its’s performance critical. By setting ‘col’ outside the image boundaries when ‘row’ reaches the maximum image height, we can “re-use” the existing code in sixel_add().
This commit is contained in:
parent
4b0e9a6bee
commit
6ab7052be4
1 changed files with 13 additions and 3 deletions
16
sixel.c
16
sixel.c
|
|
@ -966,7 +966,15 @@ decsixel(struct terminal *term, uint8_t c)
|
|||
break;
|
||||
|
||||
case '$':
|
||||
term->sixel.pos.col = 0;
|
||||
if (likely(term->sixel.pos.col <= term->sixel.max_width)) {
|
||||
/*
|
||||
* We set, and keep, ‘col’ outside the image boundary when
|
||||
* we’ve reached the maximum image height, to avoid also
|
||||
* having to check the row vs image height in the common
|
||||
* path in sixel_add().
|
||||
*/
|
||||
term->sixel.pos.col = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case '-':
|
||||
|
|
@ -974,8 +982,10 @@ decsixel(struct terminal *term, uint8_t c)
|
|||
term->sixel.pos.col = 0;
|
||||
term->sixel.row_byte_ofs += term->sixel.image.width * 6;
|
||||
|
||||
if (term->sixel.pos.row >= term->sixel.image.height)
|
||||
resize(term, term->sixel.image.width, term->sixel.pos.row + 6);
|
||||
if (term->sixel.pos.row >= term->sixel.image.height) {
|
||||
if (!resize(term, term->sixel.image.width, term->sixel.pos.row + 6))
|
||||
term->sixel.pos.col = term->sixel.max_width + 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E':
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue