[goffice] Cache GOImage pixbuf snapshot.



commit 6ee8249f50a6ce89d86315f35b375e3fe74f3679
Author: Jean Brefort <jean brefort normalesup org>
Date:   Wed Nov 9 14:39:44 2011 +0100

    Cache GOImage pixbuf snapshot.

 ChangeLog                        |    8 ++++++++
 goffice/component/go-component.c |    7 +++++++
 goffice/component/go-component.h |    2 ++
 goffice/utils/go-image.c         |    6 +++++-
 goffice/utils/go-image.h         |    1 +
 5 files changed, 23 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index d369325..3a09bce 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-11-09  Jean Brefort  <jean brefort normalesup org>
+
+	* goffice/component/go-component.c (go_component_set_font): new function.
+	* goffice/component/go-component.h: ditto.
+	* goffice/utils/go-image.c (go_image_finalize),
+	(go_image_get_pixbuf): cache the pixbuf.
+	* goffice/utils/go-image.h: ditto.
+
 2011-11-06  Jean Brefort  <jean brefort normalesup org>
 
 	* configure.in: drop gconf support.
diff --git a/goffice/component/go-component.c b/goffice/component/go-component.c
index 57ded61..f28b21a 100644
--- a/goffice/component/go-component.c
+++ b/goffice/component/go-component.c
@@ -762,3 +762,10 @@ go_component_get_snapshot (GOComponent *component, GOSnapshotType *type, size_t
 		*length = component->snapshot_length;
 	return component->snapshot_data;
 }
+
+void go_component_set_font (GOComponent *component, PangoFontDescription *desc)
+{
+	GOComponentClass *klass = GO_COMPONENT_GET_CLASS (component);
+	if (klass->set_font)
+		klass->set_font (component, desc);
+}
diff --git a/goffice/component/go-component.h b/goffice/component/go-component.h
index 7377f98..2990ec1 100644
--- a/goffice/component/go-component.h
+++ b/goffice/component/go-component.h
@@ -67,6 +67,7 @@ struct _GOComponentClass {
 	void (*set_size) (GOComponent *component);
 	void (*render) (GOComponent *component, cairo_t *cr,
 			    double width, double height);
+	void (*set_font) (GOComponent *component, PangoFontDescription *desc);
 	void (*reserved1) (void);
 	void (*reserved2) (void);
 	void (*reserved3) (void);
@@ -107,6 +108,7 @@ void go_component_set_command_context (GOCmdContext *cc);
 GOCmdContext *go_component_get_command_context (void);
 void go_component_render (GOComponent *component, cairo_t *cr, double width, double height);
 void go_component_get_size (GOComponent *component, double *width, double *height);
+void go_component_set_font (GOComponent *component, PangoFontDescription *desc);
 
 void go_component_write_xml_sax (GOComponent *component, GsfXMLOut *output);
 typedef void (*GOComponentSaxHandler)(GOComponent *component, gpointer user_data);
diff --git a/goffice/utils/go-image.c b/goffice/utils/go-image.c
index 5200fb2..0e9f912 100644
--- a/goffice/utils/go-image.c
+++ b/goffice/utils/go-image.c
@@ -346,6 +346,8 @@ go_image_finalize (GObject *obj)
 	g_free (image->data);
 	if (image->thumbnail)
 		g_object_unref (image->thumbnail);
+	if (image->pixbuf)
+		g_object_unref (image->pixbuf);
 	g_free (image->name);
 	(parent_klass->finalize) (obj);
 }
@@ -391,7 +393,9 @@ go_image_get_thumbnail (GOImage *image)
 GdkPixbuf *
 go_image_get_pixbuf (GOImage *image)
 {
-	return ((GOImageClass *) G_OBJECT_GET_CLASS (image))->get_pixbuf (image);
+	if (image->pixbuf == NULL)
+		image->pixbuf = ((GOImageClass *) G_OBJECT_GET_CLASS (image))->get_pixbuf (image);
+	return g_object_ref (image->pixbuf);
 }
 
 GdkPixbuf *
diff --git a/goffice/utils/go-image.h b/goffice/utils/go-image.h
index 65019d6..16ad5b9 100644
--- a/goffice/utils/go-image.h
+++ b/goffice/utils/go-image.h
@@ -70,6 +70,7 @@ struct _GOImage {
 	guint8 *data;
 	double width, height;
 	GdkPixbuf *thumbnail;
+	GdkPixbuf *pixbuf;
 	char *name;
 };
 



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