[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master d6d73224a2: Make fringe bitmaps respect alpha-background
From: |
Po Lu |
Subject: |
master d6d73224a2: Make fringe bitmaps respect alpha-background |
Date: |
Mon, 31 Jan 2022 20:39:31 -0500 (EST) |
branch: master
commit d6d73224a21506b0ba31fd03bd99c5535ce3bb9c
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Make fringe bitmaps respect alpha-background
* src/xterm.c (x_draw_fringe_bitmap): Respect alpha-background
on non-overlay fringe bitmaps.
* src/xterm.h (struct x_display_info): New field `alpha_mask'.
---
src/xterm.c | 13 ++++++++++++-
src/xterm.h | 1 +
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/xterm.c b/src/xterm.c
index 5bcb77bbeb..2fc336f72a 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -2032,6 +2032,7 @@ x_draw_fringe_bitmap (struct window *w, struct glyph_row
*row, struct draw_fring
Pixmap pixmap, clipmask = None;
int depth = FRAME_DISPLAY_INFO (f)->n_planes;
XGCValues gcv;
+ unsigned long background = face->background;
#ifdef HAVE_XRENDER
Picture picture = None;
XRenderPictureAttributes attrs;
@@ -2044,6 +2045,14 @@ x_draw_fringe_bitmap (struct window *w, struct glyph_row
*row, struct draw_fring
else
bits = (char *) p->bits + p->dh;
+ if (FRAME_DISPLAY_INFO (f)->alpha_bits)
+ {
+ background = (background & ~FRAME_DISPLAY_INFO (f)->alpha_mask);
+ background |= (((unsigned long) (f->alpha_background * 0xffff)
+ >> (16 - FRAME_DISPLAY_INFO (f)->alpha_bits))
+ << FRAME_DISPLAY_INFO (f)->alpha_offset);
+ }
+
/* Draw the bitmap. I believe these small pixmaps can be cached
by the server. */
pixmap = XCreatePixmapFromBitmapData (display, drawable, bits, p->wd,
p->h,
@@ -2051,7 +2060,7 @@ x_draw_fringe_bitmap (struct window *w, struct glyph_row
*row, struct draw_fring
? (p->overlay_p ? face->background
:
f->output_data.x->cursor_pixel)
: face->foreground),
- face->background, depth);
+ background, depth);
#ifdef HAVE_XRENDER
if (FRAME_X_PICTURE_FORMAT (f)
@@ -15574,6 +15583,7 @@ x_term_init (Lisp_Object display_name, char
*xrm_option, char *resource_name)
if (channel_mask)
get_bits_and_offset (channel_mask, &dpyinfo->alpha_bits,
&dpyinfo->alpha_offset);
+ dpyinfo->alpha_mask = channel_mask;
}
else
#endif
@@ -15594,6 +15604,7 @@ x_term_init (Lisp_Object display_name, char
*xrm_option, char *resource_name)
if (alpha_mask)
get_bits_and_offset (alpha_mask, &dpyinfo->alpha_bits,
&dpyinfo->alpha_offset);
+ dpyinfo->alpha_mask = alpha_mask;
}
}
}
diff --git a/src/xterm.h b/src/xterm.h
index c8c491a7d3..02270d6936 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -462,6 +462,7 @@ struct x_display_info
/* Bits and shifts to use to compose pixel values on TrueColor visuals. */
int red_bits, blue_bits, green_bits, alpha_bits;
int red_offset, blue_offset, green_offset, alpha_offset;
+ unsigned long alpha_mask;
/* The type of window manager we have. If we move FRAME_OUTER_WINDOW
to x/y 0/0, some window managers (type A) puts the window manager
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master d6d73224a2: Make fringe bitmaps respect alpha-background,
Po Lu <=