X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=example.c;h=7c69182f1e0e914aa84b1e2b22ab97ffe0f96fc1;hb=64e09f16a76b3bc808bf1fe224f6efeb8c7963d1;hp=74a66581f04bf04733795b8adc3ab9967a6c5da5;hpb=5b8186154e0c675fdd9bc1dcef1e2f29d25bd062;p=libsvgtiny-pixbuf.git diff --git a/example.c b/example.c index 74a6658..7c69182 100644 --- a/example.c +++ b/example.c @@ -305,3 +305,85 @@ int main(int argc, char** argv) { return 0; } + + +static GdkPixbuf* gdk_pixbuf_from_svg_file_stream(FILE *fp, GError **error) { + diagram_t* diagram; + cairo_t* cr = 0; + + GdkPixbuf* pb; + + diagram = svgtiny_diagram_from_file(fp, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); + if (!diagram) { + return NULL; + } + + cr = cairo_context_from_diagram(diagram); + if (!cr) { + svgtiny_free(diagram); + return NULL; + } + + /* We're using the diagram width and height and not the viewport + * width/height for the image. This has the potential to create an + * image with a different size and aspect ratio than the viewport, + * but since our viewport is entirely made-up... I don't know. This + * relies on libsvgtiny being good at scaling/stretching/etc an SVG + * that may only have partial width/height/viewBox information. + */ + pb = gdk_pixbuf_get_from_surface(cairo_get_target(cr), + 0, + 0, + diagram->width, + diagram->height); + + + if (!pb) { + fprintf(stderr, "gdk_pixbuf_get_from_surface failed!\n"); + } + + return pb; +} + + +G_MODULE_EXPORT void fill_vtable(GdkPixbufModule* module); +void fill_vtable(GdkPixbufModule* module) { + module->load = gdk_pixbuf_from_svg_file_stream; +} + +G_MODULE_EXPORT void fill_info(GdkPixbufFormat *info); +void fill_info(GdkPixbufFormat* info) { + /* Borrowed from librsvg-2.40.21 */ + static const GdkPixbufModulePattern signature[] = { + { " name = "svg"; + info->signature = (GdkPixbufModulePattern*) signature; + info->description = "Scalable Vector Graphics"; + info->mime_types = (gchar**) mime_types; + info->extensions = (gchar**) extensions; + info->flags = GDK_PIXBUF_FORMAT_SCALABLE; + info->license = "AGPL3"; +} +