bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#70697: 30.0.50; Frame parameter alpha-background is ignored for frin


From: Po Lu
Subject: bug#70697: 30.0.50; Frame parameter alpha-background is ignored for fringe bitmaps & internal borders
Date: Thu, 09 May 2024 16:03:20 +0800
User-agent: Gnus/5.13 (Gnus v5.13)

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Aleksandar Dimitrov <mail@aleks.bg>
>> Date: Wed, 01 May 2024 12:52:58 +0200
>> 
>> Hi all,
>> 
>> Runinng in any compositing window manager (this includes Wayland with a
>> PGTK build of Emacs, but also X without PGTK), the frame parameter
>> alpha-background is ignored for at least
>> 
>> - fringe bitmaps
>> - insets drawn with internal-border-width
>> 
>> The resulting visual effect is quite jarring, and makes both of these
>> difficult to use together with transparency.
>> 
>> Here's a small emacs -Q script to exhibit the problem:
>> 
>> #+begin_src emacs-lisp
>> 
>> ;; Turn off scroll bars to make the bugs more visible.
>> (scroll-bar-mode -1)
>> 
>> ;; set transparency & internal border width.
>> ;; Note how the internal border is going to be drawn in a solid white colour
>> ;; and will ignore the alpha value.
>> (modify-all-frames-parameters '((alpha-background . 50)
>>                                 (internal-border-width . 20)))
>> 
>> (define-fringe-bitmap 'test-bitmap
>>   (vector (expt 2 15)) nil 16 '(top t))
>> 
>> ;; Define a face for the fringe that has a different background colour, to
>> ;; more easily discern the fringe bitmap bug from the internal border bug.
>> (make-face 'test-face)
>> (set-face-attribute 'test-face nil :background "pink")
>> 
>> ;; Apply a fringe bitmap to all lines in the current buffer. Note how the 
>> fringe
>> ;; bitmap is monochrome, but the background colour ignores the global alpha 
>> value.
>> (defun apply-fringe-bitmap ()
>>   "Apply a fringe bitmap to the current buffer to exhibit the transparency 
>> bug."
>>   (add-text-properties
>>    (point-min) (point-max)
>>    '(wrap-prefix
>>      #(" " 0 1 (display (left-fringe test-bitmap test-face)))
>>      line-prefix
>>      #(" " 0 1 (display (left-fringe test-bitmap test-face))))))
>> 
>> (add-hook 'emacs-startup-hook #'apply-fringe-bitmap)
>> 
>> #+end_src
>> 
>> 
>> And here's how it looks like: https://aleks.bg/emacs-bug.png
>> (that's my personal home page, not an image hoster.)
>> 
>> I would expect the white border around the frame to also be transparent,
>> and the fringe, too.
>
> Po Lu, any comments or ideas about this?

This has been previously reported.  As I've stated on those occasions
and numerous others, the internal border is a _border_, a natural
component of a frame's foreground that should not be affected by its
background transparency properties.

As regards fringe bitmaps, they respond to alpha-background on the
XRender builds.  This (untested) patch might extend this to Cairo
builds:

diff --git a/src/xterm.c b/src/xterm.c
index 33ef18d8da5..4fe52bc6bf0 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -6293,7 +6293,7 @@ x_cr_draw_image (struct frame *f, GC gc, cairo_pattern_t 
*image,
     cairo_rectangle (cr, dest_x, dest_y, width, height);
   else
     {
-      x_set_cr_source_with_gc_background (f, gc, false);
+      x_set_cr_source_with_gc_background (f, gc, true);
       cairo_rectangle (cr, dest_x, dest_y, width, height);
       cairo_fill_preserve (cr);
     }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]