diff options
| author | Po Lu | 2022-02-10 19:56:30 +0800 |
|---|---|---|
| committer | Po Lu | 2022-02-10 19:56:30 +0800 |
| commit | d49c8cea4377066e8fd8035d941bf671e51722eb (patch) | |
| tree | d983302dd3109a74890cc604727050dee6bc07bb /src | |
| parent | e16a78c44e05237b98207a7cee4b0666b7e1ac2a (diff) | |
| download | emacs-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.c | 14 |
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); |