diff options
author | Rob Kendrick <rjek@netsurf-browser.org> | 2007-07-19 13:47:59 +0000 |
---|---|---|
committer | Rob Kendrick <rjek@netsurf-browser.org> | 2007-07-19 13:47:59 +0000 |
commit | 1522bfeed68110620e6e477205058ca2d5abcb3a (patch) | |
tree | e6ec39d3a6bc975c6d6a3a10f47967e3dcb88630 /image | |
parent | 2370e4c6a03be93a5c7e493562086d6e69704a38 (diff) | |
download | netsurf-1522bfeed68110620e6e477205058ca2d5abcb3a.tar.gz netsurf-1522bfeed68110620e6e477205058ca2d5abcb3a.tar.bz2 |
Add incremental parsing of SVG data to librsvg content handler.
svn path=/trunk/netsurf/; revision=3441
Diffstat (limited to 'image')
-rw-r--r-- | image/rsvg.c | 28 | ||||
-rw-r--r-- | image/rsvg.h | 1 |
2 files changed, 19 insertions, 10 deletions
diff --git a/image/rsvg.c b/image/rsvg.c index c37859bf3..0a2493ba0 100644 --- a/image/rsvg.c +++ b/image/rsvg.c @@ -58,6 +58,24 @@ bool rsvg_create(struct content *c, const char *params[]) return true; } +bool rsvg_process_data(struct content *c, const char *data, + unsigned int size) +{ + struct content_rsvg_data *d = &c->data.rsvg; + union content_msg_data msg_data; + GError *err = NULL; + + if (rsvg_handle_write(d->rsvgh, (const guchar *)data, (gsize)size, + &err) == FALSE) { + LOG(("rsvg_handle_write returned an error: %s", err->message)); + msg_data.error = err->message; + content_broadcast(c, CONTENT_MSG_ERROR, msg_data); + return false; + } + + return true; +} + /** Convert Cairo's ARGB output to NetSurf's favoured ABGR format. It converts * the data in-place. Operation is endian-swap and rotate right 8 bits. * @@ -92,16 +110,6 @@ bool rsvg_convert(struct content *c, int iwidth, int iheight) union content_msg_data msg_data; RsvgDimensionData rsvgsize; GError *err = NULL; - - if (rsvg_handle_write(d->rsvgh, (guchar *)c->source_data, - (gsize)c->source_size, &err) == FALSE) { - LOG(("rsvg_handle_write returned an error: %s", err->message)); - msg_data.error = err->message; - content_broadcast(c, CONTENT_MSG_ERROR, msg_data); - return false; - } - - assert(err == NULL); if (rsvg_handle_close(d->rsvgh, &err) == FALSE) { LOG(("rsvg_handle_close returned an error: %s", err->message)); diff --git a/image/rsvg.h b/image/rsvg.h index 04ec655c5..704b434bc 100644 --- a/image/rsvg.h +++ b/image/rsvg.h @@ -28,6 +28,7 @@ struct content_rsvg_data { }; bool rsvg_create(struct content *c, const char *params[]); +bool rsvg_process_data(struct content *c, const char *data, unsigned int size); bool rsvg_convert(struct content *c, int width, int height); void rsvg_destroy(struct content *c); bool rsvg_redraw(struct content *c, int x, int y, |