unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: David Ponce <da_vid@orange.fr>
To: Alan Third <alan@idiocy.org>, Eli Zaretskii <eliz@gnu.org>,
	64908@debbugs.gnu.org
Subject: bug#64908: 29.1; svg parse failure
Date: Sat, 5 Aug 2023 14:32:07 +0200	[thread overview]
Message-ID: <f87c12ee-0f22-2eba-153f-31551fcc383a@orange.fr> (raw)
In-Reply-To: <ZM4dQvlse+2xqSH4@idiocy.org>

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

    





  parent reply	other threads:[~2023-08-05 12:32 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-28  1:10 bug#64908: 29.1; svg parse failure Daniel Vianna
2023-07-28  6:05 ` Eli Zaretskii
     [not found]   ` <CAMLJ+NHO38NYGPctAj9MmMwy4tz8aSqHgLDWQhQaDm7FUP7Yqw@mail.gmail.com>
2023-07-28 11:00     ` Eli Zaretskii
2023-07-28 12:48       ` Visuwesh
2023-08-03  8:11         ` Eli Zaretskii
2023-08-03 19:16 ` David Ponce
2023-08-04  5:23   ` Eli Zaretskii
2023-08-04  7:55     ` David Ponce
2023-08-04 10:26       ` Eli Zaretskii
2023-08-04 16:23         ` David Ponce
2023-08-04 18:32         ` Alan Third
2023-08-04 19:08           ` Eli Zaretskii
2023-08-04 21:08             ` David Ponce
2023-08-05  8:30               ` David Ponce
2023-08-05  9:58                 ` Alan Third
2023-08-05 10:07                   ` Eli Zaretskii
2023-08-05 10:24                     ` Alan Third
2023-08-05 10:41                       ` Eli Zaretskii
2023-08-05 12:32                   ` David Ponce [this message]
2023-08-05 15:14                     ` Alan Third
2023-08-05 15:53                       ` David Ponce
2023-08-05 16:02                         ` Alan Third
2023-08-05 16:24                           ` David Ponce
2023-08-05 16:31                             ` Alan Third
2023-08-05 17:37                               ` David Ponce
2023-08-05 17:39                                 ` Alan Third
2023-08-05 18:00                                   ` David Ponce
2023-08-05 18:31                                     ` Alan Third
2023-08-05 20:04                                       ` David Ponce
2023-08-08 13:58                                         ` David Ponce
2023-08-08 21:18                                           ` Alan Third
2023-08-08 22:22                                             ` David Ponce

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f87c12ee-0f22-2eba-153f-31551fcc383a@orange.fr \
    --to=da_vid@orange.fr \
    --cc=64908@debbugs.gnu.org \
    --cc=alan@idiocy.org \
    --cc=eliz@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).