<div dir="ltr">Thank you for the quick reply.  It turns out there is probably another bug somewhere in my real program that is still causing the recording surface not to end up on the SVG surface, but at least this workaround should help me move forward.<div>I don't have a minimal example, but I have some suspicion that the same issue also affects the X11 surface (or again it could be due to the "other", still unknown issue).</div><div>In any case, should I report this to the cairo bug tracker, or is the previous email enough?</div><div>Antony</div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-10-04 5:19 GMT-07:00 Adrian Johnson <span dir="ltr"><<a href="mailto:ajohnson@redneon.com" target="_blank">ajohnson@redneon.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Seems to be a bug with unbounded recording surfaces and SVG. As a<br>
workaround if you specify an extents for the recording surface it works.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On 04/10/17 08:39, Antony Lee wrote:<br>
> Hi all,<br>
><br>
> I am having an issue with replaying a recording surface onto an SVG<br>
> surface.  A minimal example is included at the end of the email.<br>
><br>
> Briefly, the example sets up a recording surface and two 100x100<br>
> surfaces -- one IMAGE and one SVG.  It then draws a 10x10 rectangle on<br>
> each of them at position (10, 10) and saves the results (the IMAGE to a<br>
> PNG).  Both resulting files display the box at the correct position.<br>
><br>
> The example then tries to replay the recording surface onto a separate<br>
> 100x100 SVG surface, and also save that surface.  Unfortunately, this<br>
> results in a blank SVG.  Note that if, instead, the recording surface is<br>
> played onto a separate 100x100 IMAGE surface (code not included for<br>
> simplicity), this works perfectly well (the resulting PNG also displays<br>
> the box); so the basic setup of the recording surface seems correct.<br>
><br>
> I am using cairo 1.15.8 from Arch Linux.<br>
><br>
> Any help would be very welcome.  Thanks!<br>
><br>
> Antony Lee<br>
><br>
><br>
><br>
> === Example program; compile and run with:<br>
>     gcc main.c $(pkg-config --cflags --libs cairo) -o main && ./main<br>
><br>
> #include <stddef.h><br>
> #include <cairo/cairo.h><br>
> #include <cairo/cairo-svg.h><br>
><br>
> int main() {<br>
>   cairo_surface_t* rec_surf =<br>
> cairo_recording_surface_<wbr>create(CAIRO_CONTENT_COLOR_<wbr>ALPHA, NULL);<br>
>   cairo_t* rec_ctx = cairo_create(rec_surf);<br>
><br>
>   cairo_surface_t* img_surf =<br>
> cairo_image_surface_create(<wbr>CAIRO_FORMAT_ARGB32, 100, 100);<br>
>   cairo_t* img_ctx = cairo_create(img_surf);<br>
><br>
>   cairo_surface_t* svg_surf = cairo_svg_surface_create("/<wbr>tmp/test.svg",<br>
> 100, 100);<br>
>   cairo_t* svg_ctx = cairo_create(svg_surf);<br>
><br>
>   cairo_t* ctxs[3] = {rec_ctx, img_ctx, svg_ctx};<br>
><br>
>   for (unsigned i = 0; i < 3; ++i) {<br>
>     cairo_rectangle(ctxs[i], 10, 10, 10, 10);<br>
>     cairo_fill(ctxs[i]);<br>
>   }<br>
><br>
>   // Dump image to png.<br>
>   cairo_surface_write_to_png(<wbr>img_surf, "/tmp/test.png");<br>
><br>
>   // Transfer recording surface to SVG.<br>
>   cairo_surface_t* svg1_surf =<br>
> cairo_svg_surface_create("/<wbr>tmp/test1.svg", 100, 100);<br>
>   cairo_t* svg1_ctx = cairo_create(svg1_surf);<br>
>   cairo_set_source_surface(svg1_<wbr>ctx, rec_surf, 0, 0);<br>
>   cairo_paint(svg1_ctx);<br>
><br>
>   // Done.<br>
>   for (unsigned i = 0; i < 3; ++i) {<br>
>     if (cairo_status(ctxs[i])) {<br>
>       return 1;<br>
>     }<br>
>   }<br>
>   cairo_surface_finish(svg_surf)<wbr>;<br>
>   cairo_surface_finish(svg1_<wbr>surf);<br>
>   for (unsigned i = 0; i < 3; ++i) {<br>
>     cairo_surface_destroy(cairo_<wbr>get_target(ctxs[i]));<br>
>     cairo_destroy(ctxs[i]);<br>
>   }<br>
>   cairo_surface_destroy(svg1_<wbr>surf);<br>
>   cairo_destroy(svg1_ctx);<br>
> }<br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div>