summaryrefslogtreecommitdiff
path: root/image/rsvg.c
diff options
context:
space:
mode:
authorRob Kendrick <rjek@netsurf-browser.org>2007-07-19 13:47:59 +0000
committerRob Kendrick <rjek@netsurf-browser.org>2007-07-19 13:47:59 +0000
commit1522bfeed68110620e6e477205058ca2d5abcb3a (patch)
treee6ec39d3a6bc975c6d6a3a10f47967e3dcb88630 /image/rsvg.c
parent2370e4c6a03be93a5c7e493562086d6e69704a38 (diff)
downloadnetsurf-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/rsvg.c')
-rw-r--r--image/rsvg.c28
1 files changed, 18 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));