csi: the CSI-t family of queries now report unscaled pixel values

Before this patch, we reported scaled pixel values. This was rather
useless, since applications have no way of getting the scaling factor,
to "scale up" e.g. images.

Furthermore, the most common use of these queries are probably to
calculate the dimensions to use when emitting sixels.

Closes #1643
This commit is contained in:
Daniel Eklöf 2024-03-14 07:03:51 +01:00
parent f72555f29a
commit 712bc95db3
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 9 additions and 9 deletions

View file

@ -102,12 +102,15 @@
* Kitty keyboard protocol: filter out **all** locked modifiers (as
reported by XKB), rather than hardcoding it to CapsLock only, when
determining whether a key combination produces text or not.
* CSI-t queries now report pixel values **unscaled**, instead of
**scaled** ([#1643][1643]).
[1526]: https://codeberg.org/dnkl/foot/issues/1526
[1528]: https://codeberg.org/dnkl/foot/issues/1528
[1561]: https://codeberg.org/dnkl/foot/issues/1561
[kitty-6913]: https://github.com/kovidgoyal/kitty/issues/6913
[1584]: https://codeberg.org/dnkl/foot/issues/1584
[1643]: https://codeberg.org/dnkl/foot/issues/1643
### Deprecated

15
csi.c
View file

@ -1219,9 +1219,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
if (width >= 0 && height >= 0) {
char reply[64];
size_t n = xsnprintf(
reply, sizeof(reply), "\033[4;%d;%dt",
(int)roundf(height / term->scale),
(int)roundf((width / term->scale)));
reply, sizeof(reply), "\033[4;%d;%dt", height, width);
term_to_slave(term, reply, n);
}
break;
@ -1231,8 +1229,8 @@ csi_dispatch(struct terminal *term, uint8_t final)
tll_foreach(term->window->on_outputs, it) {
char reply[64];
size_t n = xsnprintf(reply, sizeof(reply), "\033[5;%d;%dt",
it->item->dim.px_scaled.height,
it->item->dim.px_scaled.width);
it->item->dim.px_real.height,
it->item->dim.px_real.width);
term_to_slave(term, reply, n);
break;
}
@ -1245,8 +1243,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
char reply[64];
size_t n = xsnprintf(
reply, sizeof(reply), "\033[6;%d;%dt",
(int)roundf(term->cell_height / term->scale),
(int)roundf(term->cell_width / term->scale));
term->cell_height, term->cell_width);
term_to_slave(term, reply, n);
break;
}
@ -1264,8 +1261,8 @@ csi_dispatch(struct terminal *term, uint8_t final)
char reply[64];
size_t n = xsnprintf(
reply, sizeof(reply), "\033[9;%d;%dt",
(int)roundf(it->item->dim.px_real.height / term->cell_height / term->scale),
(int)roundf(it->item->dim.px_real.width / term->cell_width / term->scale));
it->item->dim.px_real.height / term->cell_height,
it->item->dim.px_real.width / term->cell_width);
term_to_slave(term, reply, n);
break;
}