[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#40845: SVG rendering issues
From: |
Clément Pit-Claudel |
Subject: |
bug#40845: SVG rendering issues |
Date: |
Sat, 25 Apr 2020 08:19:01 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 |
Hi all,
As discussed on the mailing list, a number of issues currently exist with our
SVG rendering implementation. I have tried to summarize the ones I'm aware of
in the following example.
(with-current-buffer (get-buffer-create "*svg bugs*")
(erase-buffer)
(require 'face-remap)
(setq text-scale-mode-amount 10)
(text-scale-mode)
(let ((svg (svg-create 16 16)))
(svg-ellipse svg 8 8 4 4)
(insert "Text: ")
(print (svg-image svg :ascent 100))
(insert-image (svg-image svg :ascent 100))
(insert-image (svg-image svg :scale 5.0 :ascent 'center :foreground "red"
:background "darkgreen"))
(add-text-properties
(point-min) (point-max)
'(face (:foreground "orange" :background "purple")
mouse-face '(:foreground "purple" :background "orange"))))
(pop-to-buffer (current-buffer)))
The issues:
1. Manually scaling an image, as is done for the second image, doesn't
re-render the svg: is scales the bitmap-rendered version of it, causing
blurriness.
2. The SVG images don't inherit the background of the current face; instead,
they inherit the background of the default face.
3. The SVG images don't inherit the foreground of the current face; instead,
they use a black foreground.
4. The :foreground keyword has no effect on svg images.
5. The images are not scaled with the text: changing text-scale-mode-amount
doesn't change the size of the images.
For 1, 2, 3, and 4, the expected behavior is easy to define:
- For 1, the image should be scaled before being rasterized.
- For 2 and 3, the image should inherit the characteristics of the current
face, and be re-rendered if that face changes (e.g. when mouse-face applies,
which is important for buttons)
- For 4, the :foreground property should be respected
For 5, it's a bit trickier. One option would be to accept a float-valued
:height specification and treat that as a multiple of the current font size.
A partial workaround for 2 is to add an explicit :background, but it doesn't
help with face changes, such as applying a mouse-face. For 1 and 5 it can be
enough to set the size in the SVG and add hooks, but that only works easily for
SVGs created within emacs. For 3 and 4, I don't know of a workaround except
modifying the SVG.
Cheers,
Clément.
- bug#40845: SVG rendering issues,
Clément Pit-Claudel <=
- bug#40845: SVG rendering issues, Pip Cet, 2020/04/25
- bug#40845: SVG rendering issues, Eli Zaretskii, 2020/04/25
- bug#40845: SVG rendering issues, Pip Cet, 2020/04/25
- bug#40845: SVG rendering issues, Eli Zaretskii, 2020/04/25
- bug#40845: SVG rendering issues, Pip Cet, 2020/04/25
- bug#40845: SVG rendering issues, Eli Zaretskii, 2020/04/25
- bug#40845: SVG rendering issues, Pip Cet, 2020/04/25
- bug#40845: SVG rendering issues, Eli Zaretskii, 2020/04/25
- bug#40845: SVG rendering issues, Pip Cet, 2020/04/26
- bug#40845: SVG rendering issues, Eli Zaretskii, 2020/04/26