[lasem] svg_view: store intermediate filter surfaces.



commit 94d0d03b45e00ed62afb04618db51718360d6a65
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Sun Aug 29 09:50:41 2010 +0200

    svg_view: store intermediate filter surfaces.

 src/lsmsvgview.c |   26 +++++++++++++++++++++++++-
 src/lsmsvgview.h |    5 +++++
 2 files changed, 30 insertions(+), 1 deletions(-)
---
diff --git a/src/lsmsvgview.c b/src/lsmsvgview.c
index 9d5b29f..fcd31f1 100644
--- a/src/lsmsvgview.c
+++ b/src/lsmsvgview.c
@@ -31,6 +31,7 @@
 #include <lsmsvgmarkerelement.h>
 #include <lsmsvgclippathelement.h>
 #include <lsmsvgmaskelement.h>
+#include <lsmcairo.h>
 #include <lsmstr.h>
 #include <gdk/gdk.h>
 #include <glib/gprintf.h>
@@ -1867,7 +1868,10 @@ void
 lsm_svg_view_pop_filter (LsmSvgView *view)
 {
 	LsmSvgElement *filter_element;
+	LsmFilterSurface *filter_surface;
+	cairo_surface_t *surface;
 	cairo_t *cairo;
+	GSList *iter;
 
 	g_return_if_fail (LSM_IS_SVG_VIEW (view));
 
@@ -1876,6 +1880,13 @@ lsm_svg_view_pop_filter (LsmSvgView *view)
 
 	cairo = view->pattern_data->old_cairo;
 
+	view->filter_surfaces = NULL;
+
+	cairo_pattern_get_surface (view->pattern_data->pattern, &surface);
+	filter_surface = lsm_filter_surface_new_with_content ("SourceGraphic", 0, 0, surface);
+
+	view->filter_surfaces = g_slist_prepend (view->filter_surfaces, filter_surface);
+
 #if 1
 	{
 		char *filename;
@@ -1887,15 +1898,28 @@ lsm_svg_view_pop_filter (LsmSvgView *view)
 	}
 #endif
 
-#if 0
+#if 1
 	cairo_pattern_set_extend (view->pattern_data->pattern, CAIRO_EXTEND_NONE);
 	cairo_set_source (cairo, view->pattern_data->pattern);
 	cairo_paint (cairo);
 #endif
+
+	for (iter = view->filter_surfaces; iter != NULL; iter = iter->next)
+		lsm_filter_surface_free (iter->data);
+	g_slist_free (view->filter_surfaces);
+	view->filter_surfaces = NULL;
+
 	_end_pattern (view);
 }
 
 void
+lsm_svg_view_apply_gaussian_blur (LsmSvgView *view, const char *input, const char *output,
+				  double x, double y, double w, double h,
+				  double std_x, double std_y)
+{
+}
+
+void
 lsm_svg_view_push_element (LsmSvgView *view, const LsmSvgElement *element)
 {
 	g_return_if_fail (LSM_IS_SVG_VIEW (view));
diff --git a/src/lsmsvgview.h b/src/lsmsvgview.h
index 390d2c3..85bffdc 100644
--- a/src/lsmsvgview.h
+++ b/src/lsmsvgview.h
@@ -71,6 +71,8 @@ struct _LsmSvgView {
 	LsmBox clip_extents;
 
 	double last_stop_offset;
+
+	GSList *filter_surfaces;
 };
 
 struct _LsmSvgViewClass {
@@ -141,6 +143,9 @@ void		lsm_svg_view_pop_style			(LsmSvgView *view);
 
 LsmSvgStyle *	lsm_svg_view_get_current_style	(LsmSvgView *view);
 
+void		lsm_svg_view_apply_gaussian_blur 	(LsmSvgView *view, const char *input, const char *output,
+							 double x, double y, double w, double h,
+							 double std_x, double std_y);
 G_END_DECLS
 
 #endif



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]