mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-04-14 08:21:27 -04:00
commit
55f592b210
2 changed files with 25 additions and 4 deletions
|
|
@ -56,6 +56,9 @@
|
||||||
unrelated cells (https://codeberg.org/dnkl/foot/issues/816).
|
unrelated cells (https://codeberg.org/dnkl/foot/issues/816).
|
||||||
* OSC-8 URIs incorrectly being dropped when resizing the terminal
|
* OSC-8 URIs incorrectly being dropped when resizing the terminal
|
||||||
window with the alternate screen active.
|
window with the alternate screen active.
|
||||||
|
* CSD border not being dimmed when window is not focused.
|
||||||
|
* Visual corruption with large CSD borders
|
||||||
|
(https://codeberg.org/dnkl/foot/issues/823).
|
||||||
|
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
|
|
||||||
26
render.c
26
render.c
|
|
@ -1763,14 +1763,16 @@ render_csd_border(struct terminal *term, enum csd_surface surf_idx,
|
||||||
* The “visible” border.
|
* The “visible” border.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int bwidth = term->conf->csd.border_width; /* Full border size */
|
int bwidth = max(term->conf->csd.border_width,
|
||||||
int vwidth = term->conf->csd.border_width_visible; /* Visibls size */
|
term->conf->csd.border_width_visible); /* Full border size */
|
||||||
|
int vwidth = term->conf->csd.border_width_visible; /* Visibls size */
|
||||||
|
|
||||||
if (vwidth > 0) {
|
if (vwidth > 0) {
|
||||||
|
|
||||||
const struct config *conf = term->conf;
|
const struct config *conf = term->conf;
|
||||||
int x = 0, y = 0, w = 0, h = 0;
|
int x = 0, y = 0, w = 0, h = 0;
|
||||||
|
|
||||||
|
|
||||||
switch (surf_idx) {
|
switch (surf_idx) {
|
||||||
case CSD_SURF_TOP:
|
case CSD_SURF_TOP:
|
||||||
case CSD_SURF_BOTTOM:
|
case CSD_SURF_BOTTOM:
|
||||||
|
|
@ -1788,17 +1790,33 @@ render_csd_border(struct terminal *term, enum csd_surface surf_idx,
|
||||||
h = info->height;
|
h = info->height;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
case CSD_SURF_TITLE:
|
||||||
break;
|
case CSD_SURF_MINIMIZE:
|
||||||
|
case CSD_SURF_MAXIMIZE:
|
||||||
|
case CSD_SURF_CLOSE:
|
||||||
|
case CSD_SURF_COUNT:
|
||||||
|
BUG("unexpected CSD surface type");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xassert(x >= 0);
|
||||||
|
xassert(y >= 0);
|
||||||
|
xassert(w >= 0);
|
||||||
|
xassert(h >= 0);
|
||||||
|
|
||||||
|
xassert(x + w <= info->width);
|
||||||
|
xassert(y + h <= info->height);
|
||||||
|
|
||||||
uint32_t _color =
|
uint32_t _color =
|
||||||
conf->csd.color.border_set ? conf->csd.color.border :
|
conf->csd.color.border_set ? conf->csd.color.border :
|
||||||
conf->csd.color.title_set ? conf->csd.color.title :
|
conf->csd.color.title_set ? conf->csd.color.title :
|
||||||
0xffu << 24 | term->conf->colors.fg;
|
0xffu << 24 | term->conf->colors.fg;
|
||||||
|
if (!term->visual_focus)
|
||||||
|
_color = color_dim(term, _color);
|
||||||
|
|
||||||
uint16_t alpha = _color >> 24 | (_color >> 24 << 8);
|
uint16_t alpha = _color >> 24 | (_color >> 24 << 8);
|
||||||
pixman_color_t color = color_hex_to_pixman_with_alpha(_color, alpha);
|
pixman_color_t color = color_hex_to_pixman_with_alpha(_color, alpha);
|
||||||
|
|
||||||
|
|
||||||
pixman_image_fill_rectangles(
|
pixman_image_fill_rectangles(
|
||||||
PIXMAN_OP_SRC, buf->pix[0], &color, 1,
|
PIXMAN_OP_SRC, buf->pix[0], &color, 1,
|
||||||
&(pixman_rectangle16_t){x, y, w, h});
|
&(pixman_rectangle16_t){x, y, w, h});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue