[cairo] Loading SVG from memory using RSVG

Simon Flannery simon_flannery at yahoo.com.au
Sun Dec 3 17:37:17 PST 2006


Nope, sorry no joy. I tried:

   rsvg_init();
 //  g_my_svg = rsvg_handle_new_from_data(data, sizeof(data), &pError);
   g_my_svg = rsvg_handle_new();
   gboolean b = rsvg_handle_write(g_my_svg, data, sizeof(data), &pError);

The variable is set to 1, is that good or bad? And there does not seem to be a error. But nothing is drawn using:

   static float rotate = 0.0f;
                rotate = rotate + 1.0f;
   cairo_surface_t* surface = cairo_win32_surface_create(hdc);
   cairo_t* cr = cairo_create(surface);
/* Push the matrix stack. */
   cairo_save(cr);
   cairo_translate(cr, (double) width * 0.5, (double) height * 0.5);
   cairo_rotate(cr, (3.14f / 180.0f) * rotate);
/* Undo the translation and center the decal. */
   cairo_translate(cr, (double) width * -0.5 * g_zoom, (double) height * -0.5 * g_zoom);
/* Scale up to full-window size. */
  // cairo_scale(cr, ((double) width / (double) g_dimension.width) * g_zoom, ((double) height / (double) g_dimension.height) * g_zoom);
/* Paint the background context colort white. */
   cairo_set_source_rgba(cr, 1.0f, 1.0f, 1.0f, 1.0f);
   cairo_paint(cr);
/* Apply our decal. */
   rsvg_handle_render_cairo(g_my_svg, cr);
/* Pop the matrix stack. */
   cairo_restore(cr);
/* Force pipeline out. */
   cairo_surface_flush(surface);
/* Clean up. */
   cairo_destroy(cr);
   cairo_surface_destroy(surface);
   return;

Any other ideas?

TIA,

Simon

----- Original Message ----
From: Daniel Amelang <daniel.amelang at gmail.com>
To: Simon Flannery <simon_flannery at yahoo.com.au>
Cc: cairo at cairographics.org
Sent: Monday, 4 December, 2006 10:55:15 AM
Subject: Re: [cairo] Loading SVG from memory using RSVG


On 12/3/06, Simon Flannery <simon_flannery at yahoo.com.au> wrote:
> Hi,
>
> Loading and rendering a SVG from a file was error free, but how do you load and render a SVG from a chunk of memory?
>
> For example:
>
> ..
> const unsigned char* data = (const unsigned char*) "<svg xmlns=\"http://www.w3.org/2000/svg\"; version=\"1.1\"><desc>Simple Polygon Test</desc><polygon fill=\"#69c2d4\" stroke=\"#facd2d\" stroke-width=\"7\" points=\"119,0 148,86 238,86 166,140 192,226 119,175 46,226 72,140 0,86 90,86\" /></svg>"; // should render a star.
> ..
> g_my_svg = rsvg_handle_new_from_data(data, sizeof(data), &pError);
> MessageBox(NULL, pError->message, "Error", 0); // Always says "Error parsing XML data"
> ..
>
> I can load the exact same XML / SVG from a file and get cario to render it, but no luck from memory. Any Ideas, Help?

The rsvg list is here:

http://lists.sourceforge.net/lists/listinfo/librsvg-devel

But, for what it's worth, I think what you're looking for is rsvg_handle_write.

Dan

Send instant messages to your online friends http://au.messenger.yahoo.com 


More information about the cairo mailing list