aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2022-02-10 19:56:30 +0800
committerPo Lu2022-02-10 19:56:30 +0800
commitd49c8cea4377066e8fd8035d941bf671e51722eb (patch)
treed983302dd3109a74890cc604727050dee6bc07bb /src
parente16a78c44e05237b98207a7cee4b0666b7e1ac2a (diff)
downloademacs-d49c8cea4377066e8fd8035d941bf671e51722eb.tar.gz
emacs-d49c8cea4377066e8fd8035d941bf671e51722eb.zip
Correctly premultiply background color of fringe bitmaps
* src/xterm.c (x_draw_fringe_bitmap): Premultiply alphas by alpha_background.
Diffstat (limited to 'src')
-rw-r--r--src/xterm.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/xterm.c b/src/xterm.c
index bd0fdde01ee..469077c8972 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -2111,6 +2111,7 @@ x_draw_fringe_bitmap (struct window *w, struct glyph_row *row, struct draw_fring
2111 int depth = FRAME_DISPLAY_INFO (f)->n_planes; 2111 int depth = FRAME_DISPLAY_INFO (f)->n_planes;
2112 XGCValues gcv; 2112 XGCValues gcv;
2113 unsigned long background = face->background; 2113 unsigned long background = face->background;
2114 XColor bg;
2114#ifdef HAVE_XRENDER 2115#ifdef HAVE_XRENDER
2115 Picture picture = None; 2116 Picture picture = None;
2116 XRenderPictureAttributes attrs; 2117 XRenderPictureAttributes attrs;
@@ -2123,9 +2124,18 @@ x_draw_fringe_bitmap (struct window *w, struct glyph_row *row, struct draw_fring
2123 else 2124 else
2124 bits = (char *) p->bits + p->dh; 2125 bits = (char *) p->bits + p->dh;
2125 2126
2126 if (FRAME_DISPLAY_INFO (f)->alpha_bits) 2127 if (FRAME_DISPLAY_INFO (f)->alpha_bits
2128 && f->alpha_background < 1.0)
2127 { 2129 {
2128 background = (background & ~FRAME_DISPLAY_INFO (f)->alpha_mask); 2130 bg.pixel = background;
2131 x_query_colors (f, &bg, 1);
2132 bg.red *= f->alpha_background;
2133 bg.green *= f->alpha_background;
2134 bg.blue *= f->alpha_background;
2135
2136 background = x_make_truecolor_pixel (FRAME_DISPLAY_INFO (f),
2137 bg.red, bg.green, bg.blue);
2138 background &= ~FRAME_DISPLAY_INFO (f)->alpha_mask;
2129 background |= (((unsigned long) (f->alpha_background * 0xffff) 2139 background |= (((unsigned long) (f->alpha_background * 0xffff)
2130 >> (16 - FRAME_DISPLAY_INFO (f)->alpha_bits)) 2140 >> (16 - FRAME_DISPLAY_INFO (f)->alpha_bits))
2131 << FRAME_DISPLAY_INFO (f)->alpha_offset); 2141 << FRAME_DISPLAY_INFO (f)->alpha_offset);