Author: rjek
Date: Thu Jul 19 14:47:59 2007
New Revision: 3441
URL:
http://source.netsurf-browser.org?rev=3441&view=rev
Log:
Add incremental parsing of SVG data to librsvg content handler.
Modified:
trunk/netsurf/content/content.c
trunk/netsurf/image/rsvg.c
trunk/netsurf/image/rsvg.h
Modified: trunk/netsurf/content/content.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/content/content.c?rev=344...
==============================================================================
--- trunk/netsurf/content/content.c (original)
+++ trunk/netsurf/content/content.c Thu Jul 19 14:47:59 2007
@@ -314,7 +314,7 @@
0, svg_destroy, 0, svg_redraw, 0, 0, 0, false},
#endif
#ifdef WITH_RSVG
- {rsvg_create, 0, rsvg_convert,
+ {rsvg_create, rsvg_process_data, rsvg_convert,
0, rsvg_destroy, 0, rsvg_redraw, 0, 0, 0, false},
#endif
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false}
Modified: trunk/netsurf/image/rsvg.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/image/rsvg.c?rev=3441&...
==============================================================================
--- trunk/netsurf/image/rsvg.c (original)
+++ trunk/netsurf/image/rsvg.c Thu Jul 19 14:47:59 2007
@@ -58,6 +58,24 @@
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 @@
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));
Modified: trunk/netsurf/image/rsvg.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/image/rsvg.h?rev=3441&...
==============================================================================
--- trunk/netsurf/image/rsvg.h (original)
+++ trunk/netsurf/image/rsvg.h Thu Jul 19 14:47:59 2007
@@ -28,6 +28,7 @@
};
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,