Implement generalised image support

Support Kitty and SIXEL input and output with grid-resident image layers, history and copy-mode integration, text fallback rendering, and damage-rectangle redraws.

Consolidate the image work through 250f96b4b onto the redraw-damage-rectangles-new base, excluding the superseded redraw implementation and its historical merges. The original history is preserved in backup/4902-image-support-before-master-rebase-20261003.
This commit is contained in:
Michael Grant
2026-10-03 22:46:01 +01:00
parent 9286115b43
commit cfd1b81dc7
44 changed files with 7586 additions and 677 deletions

View File

@@ -152,7 +152,18 @@ clients_calculate_size(int type, int current, struct client *c,
*sx = UINT_MAX;
*sy = UINT_MAX;
}
*xpixel = *ypixel = 0;
if (w != NULL && type == WINDOW_SIZE_MANUAL) {
/*
* Manual mode has no separate pixel size to apply, so keep the
* window's own - otherwise this always differs from the real
* w->xpixel/ypixel, and recalculate_size() can never tell a
* later call apart from an actual change, resizing (and
* re-firing window-resized) on every recalculation.
*/
*xpixel = w->xpixel;
*ypixel = w->ypixel;
} else
*xpixel = *ypixel = 0;
/*
* For latest, count the number of clients with this window. We only
@@ -386,10 +397,12 @@ recalculate_size(struct window *w, int now)
* got a resize scheduled, then use the new size; otherwise the old.
*/
if (w->flags & WINDOW_RESIZE) {
if (!now && changed && w->new_sx == sx && w->new_sy == sy)
if (!now && changed && w->new_sx == sx && w->new_sy == sy &&
w->new_xpixel == xpixel && w->new_ypixel == ypixel)
changed = 0;
} else {
if (!now && changed && w->sx == sx && w->sy == sy)
if (!now && changed && w->sx == sx && w->sy == sy &&
w->xpixel == xpixel && w->ypixel == ypixel)
changed = 0;
}