mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-04-06 07:15:30 -04:00
sixel: overwrite-by-rectangle: optimize: break out of loop as soon as possible
Since the images are sorted, we can break out of the loop as soon as we detect an image that *ends before* the rectangle's top starts. In order for the row comparisons to work, the row numbers must be re-based against the current scrollback offset, or the scrollback *end*, to be precise.
This commit is contained in:
parent
43b890c8e4
commit
1140dd37d3
1 changed files with 18 additions and 0 deletions
18
sixel.c
18
sixel.c
|
|
@ -344,12 +344,30 @@ _sixel_overwrite_by_rectangle(
|
||||||
const int start = row;
|
const int start = row;
|
||||||
const int end = row + height - 1;
|
const int end = row + height - 1;
|
||||||
|
|
||||||
|
const int scrollback_end
|
||||||
|
= (term->grid->offset + term->rows) & (term->grid->num_rows - 1);
|
||||||
|
|
||||||
|
const int grid_relative_start
|
||||||
|
= (start
|
||||||
|
- scrollback_end
|
||||||
|
+ term->grid->num_rows) & (term->grid->num_rows - 1);
|
||||||
|
|
||||||
tll_foreach(term->grid->sixel_images, it) {
|
tll_foreach(term->grid->sixel_images, it) {
|
||||||
struct sixel *six = &it->item;
|
struct sixel *six = &it->item;
|
||||||
|
|
||||||
const int six_start = six->pos.row;
|
const int six_start = six->pos.row;
|
||||||
const int six_end = (six_start + six->rows - 1) & (term->grid->num_rows - 1);
|
const int six_end = (six_start + six->rows - 1) & (term->grid->num_rows - 1);
|
||||||
|
|
||||||
|
const int six_grid_relative_end =
|
||||||
|
(six_end
|
||||||
|
- scrollback_end
|
||||||
|
+ + term->grid->num_rows) & (term->grid->num_rows - 1);
|
||||||
|
|
||||||
|
if (six_grid_relative_end < grid_relative_start) {
|
||||||
|
/* All remaining sixels are *before* our rectangle */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* We should never generate scrollback wrapping sixels */
|
/* We should never generate scrollback wrapping sixels */
|
||||||
assert(six_end >= six_start);
|
assert(six_end >= six_start);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue