[cairo] SVG backend patch - update

Jason Dorje Short jdorje at users.sf.net
Fri Sep 2 14:24:26 PDT 2005

Emmanuel Pacaud wrote:
> Le dimanche 07 août 2005 à 11:57 +0200, Emmanuel Pacaud a écrit :

>>Here's attached a more complete SVG backend, along with a cairo-demo
>>patch which provides a new cairo_snippets_svg utility.

> Really, no comments ? 
> I'd like to make this patch commitable, and would really appreciate a
> review before continuing this work.

I had to manually resolve conflicts in cairoint.h.  Then...

cairo will be compiled with the following surface backends:
   Xlib:       yes
   Quartz:     no
   XCB:        no
   Win32:      no
   PostScript: no
   PDF:        no
   SVG:        yes
   glitz:      no

the following font backends:
   FreeType:   yes
   Win32:      no
   ATSUI:      no

In file included from cairo-font-subset.c:37:
cairo-pdf.h:65:3: error: #error Cairo was not compiled with support for 
the pdf backend

which is obviously bad.  Now when I try configuring with 
--enable-pdf...and it compiles and installs.

I notice the default DPI is 300.  This should be changed to 90; see 
http://www.w3.org/TR/REC-CSS2/syndata.html.  It's not entirely clear to 
me how DPI and width_in_points issues should be handled in the interface.

I would like to be able to create an SVG into a fixed or variable-sized 
buffer rather than being forced to stream it or give a filename. 
Couldn't it take a FILE* instead?  But, I guess this is the way image 
surfaces do it...

So next I tried converting svg2png into svg2svg.  The attached patch 
does this.  Instead of rendering to an image surface we just render to 
an SVG surface.  However it segfaults:

(gdb) bt
#0  0x00000000 in ?? ()
#1  0xb7e83e9d in _cairo_surface_get_extents (surface=0x80546d0,
     rectangle=0xbfdaa628) at cairo-surface.c:1493
#2  0xb7e7a338 in _cairo_gstate_paint (gstate=0x8054ab0) at 
#3  0xb7e7523c in cairo_paint (cr=0x8054730) at cairo.c:1409
#4  0x080496a7 in render_to_png (svg_file=0x804b008, png_file=0x804b170,
     args=0xbfdaa6fc) at svg2png.c:199
#5  0x08049193 in main (argc=3, argv=0xbfdaa7c4) at svg2png.c:76

the reason being that surface->backend->get_extents is NULL.


More information about the cairo mailing list