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

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

bug#64908: 29.1; svg parse failure


From: David Ponce
Subject: bug#64908: 29.1; svg parse failure
Date: Sat, 5 Aug 2023 14:32:07 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.14.0

On 05/08/2023 11:58, Alan Third wrote:
Hi David, I did a bit of thinking about what a percentage in the width
or height attributes actually means and how librsvg handles it.

I think we should always ignore it.

A percentage is intended as a percentage of the enclosing box. this
means if we set an image width of 100 pixels in Emacs, and the width
in the SVG is 50%, the image should be 50 pixels wide.

However we requested a width of 100 pixels, and Emacs will give us
that no matter what, even scaling it back up.

Additionally, librsvg will scale the drawn image to a width of 50%
anyway.

What this means is if we set the image width to 100 pixels, librsvg
will scale its drawing down by 50% and it should come out the correct
size within the 100 pixel wide image.

I hope that made sense, it took me a bit of thinking about it before I
came to this conclusion. It was really the fact that librsvg scales
its drawing anyway that made me decide there's no point in us also
scaling it.

I've attached a patch, can you give it a go and let me know how it
works.

Or if you disagree with my analysis above, let me know, because I'm
not 100% sure of it.

Hi Alan,

I did test your V2 patch, and it seems to work well.
I tend to agree with your reasoning, even if I am not enough a
librsvg expert to fully understand all the details.

One case however is not working, when the svg image just specify
percentage for width and height without a viewbox, like this:

'(image :type svg :data
     "<svg xmlns=\"http://www.w3.org/2000/svg\"; width=\"100%\" height=\"100%\">
  <defs id=\"defs3051\">
    <style type=\"text/css\" id=\"current-color-scheme\">
      .ColorScheme-Text {
        color:#232629;
      }
      </style>
  </defs>
 <path
    style=\"fill:currentColor;fill-opacity:1;stroke:none\"
    d=\"m7.707031 3l-.707031.707031 6.125 6.125 1.167969 1.167969-1.167969 
1.167969-6.125 6.125.707031.707031 6.125-6.125 1.875-1.875-1.875-1.875-6.125-6.125\"
    class=\"ColorScheme-Text\"
    />
</svg>"
     :scale 1)

I can display a such image in firefox, gwenview, or inkscape, but not in Emacs.
I guess it works in applications that provide a default viewbox when not 
defined.
And it is failing in Emacs because no default viewbox is provided.

What could be questionable is if it makes sense to fail when image also 
specifies
:width and :height, like this:

'(image :type svg :data
     "<svg xmlns=\"http://www.w3.org/2000/svg\"; width=\"100%\" height=\"100%\">
  <defs id=\"defs3051\">
    <style type=\"text/css\" id=\"current-color-scheme\">
      .ColorScheme-Text {
        color:#232629;
      }
      </style>
  </defs>
 <path
    style=\"fill:currentColor;fill-opacity:1;stroke:none\"
    d=\"m7.707031 3l-.707031.707031 6.125 6.125 1.167969 1.167969-1.167969 
1.167969-6.125 6.125.707031.707031 6.125-6.125 1.875-1.875-1.875-1.875-6.125-6.125\"
    class=\"ColorScheme-Text\"
    />
</svg>"
     :scale 1 :width 22 :height 22)

I wonder if it could make sense to provide a default viewbox having image 
:width and :height?
Not sure it will be useful, though.

Thanks





reply via email to

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