[goffice] GOImage load pixbufs from memory.



commit a17dc4ccff4a1e9d28be7937a9943d9b1fd65804
Author: Jean Brefort <jean brefort normalesup org>
Date:   Fri Nov 4 17:14:56 2011 +0100

    GOImage load pixbufs from memory.

 ChangeLog                   |    7 +++++++
 NEWS                        |    2 +-
 goffice/gtk/go-image-sel.ui |   11 ++---------
 goffice/utils/go-image.c    |   30 +++++++++++++++++++++++++++++-
 goffice/utils/go-image.h    |    2 ++
 goffice/utils/go-style.c    |    1 -
 6 files changed, 41 insertions(+), 12 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 172ef78..8e33527 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2011-11-04  Jean Brefort  <jean brefort normalesup org>
 
+	* goffice/gtk/go-image-sel.ui: make the icon selector larger.
+	* goffice/utils/go-image.c (go_image_new_from_data): add support for pixbuf,
+	(go_image_new_for_format), (go_image_type_for_format): new functions.
+	* goffice/utils/go-image.h: ditto.
+
+2011-11-04  Jean Brefort  <jean brefort normalesup org>
+
 	* configure.in: add a test for libspectre presence.
 	* goffice/component/go-component.c (go_component_write_xml_sax),
 	(_go_component_start): remove obsolete GOC_PARAM_PERSISTENT.
diff --git a/NEWS b/NEWS
index 77fb36a..59d7309 100644
--- a/NEWS
+++ b/NEWS
@@ -37,7 +37,7 @@ Jean:
 	* Fix background images issues in graphs. [#660917]
 	* Make GSettings the default configuration backend.
 	* Add support for SVG images.
-	* Add some optional support for EPS images.
+	* Add some optional support for EPS images. [#663078]
 
 Morten:
 	* Recognize scientific formats with longer exponents.
diff --git a/goffice/gtk/go-image-sel.ui b/goffice/gtk/go-image-sel.ui
index 1ca64e9..7b07b29 100644
--- a/goffice/gtk/go-image-sel.ui
+++ b/goffice/gtk/go-image-sel.ui
@@ -24,6 +24,8 @@
             <property name="column_spacing">12</property>
             <child>
               <object class="GtkScrolledWindow" id="scrolledwindow1">
+                <property name="width_request">300</property>
+                <property name="height_request">250</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="hexpand">True</property>
@@ -111,15 +113,6 @@
             <child>
               <placeholder/>
             </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
           </object>
           <packing>
             <property name="expand">False</property>
diff --git a/goffice/utils/go-image.c b/goffice/utils/go-image.c
index b7071e7..5200fb2 100644
--- a/goffice/utils/go-image.c
+++ b/goffice/utils/go-image.c
@@ -478,7 +478,13 @@ go_image_new_from_data (char const *type, guint8 const *data, gsize length, char
 		image = go_spectre_new_from_data (data, length, error);
 #endif
 	} else {
-		/* FIXME: pixbuf */
+		GdkPixbufLoader *loader = gdk_pixbuf_loader_new_with_type (type, error);
+		if (loader) {
+			if (gdk_pixbuf_loader_write (loader, data, length, error))
+				image = go_pixbuf_new_from_pixbuf (gdk_pixbuf_loader_get_pixbuf (loader));
+			gdk_pixbuf_loader_close (loader, error);
+			g_object_unref (loader);
+		}
 	}
 	if (format)
 		*format = g_strdup (type);
@@ -486,6 +492,28 @@ go_image_new_from_data (char const *type, guint8 const *data, gsize length, char
 	return image;
 }
 
+GOImage *
+go_image_new_for_format (char const *format)
+{
+	GType gtype = go_image_type_for_format (format);
+	return (gtype > 0)? g_object_new (gtype, NULL): NULL;
+}
+
+GType
+go_image_type_for_format (char const *format)
+{
+	g_return_val_if_fail (format && *format, 0);
+	if (!strcmp (format, "svg"))
+		return GO_TYPE_SVG;
+	if (!strcmp (format, "emf") || !strcmp (format, "wmf"))
+		return GO_TYPE_EMF;
+	 if (!strcmp (format, "eps"))
+		return GO_TYPE_SPECTRE;
+	if (go_image_get_format_from_name (format) != GO_IMAGE_FORMAT_UNKNOWN)
+		return GO_TYPE_PIXBUF;
+	return 0;
+}
+
 guint8 *
 go_image_get_pixels (GOImage *image)
 {
diff --git a/goffice/utils/go-image.h b/goffice/utils/go-image.h
index 54bed31..34d6117 100644
--- a/goffice/utils/go-image.h
+++ b/goffice/utils/go-image.h
@@ -93,6 +93,8 @@ void		 go_image_draw			(GOImage *image, cairo_t *cr);
 
 GOImage 	*go_image_new_from_file 	(char const *filename, GError **error);
 GOImage 	*go_image_new_from_data 	(char const *type, guint8 const *data, gsize length, char **format, GError **error);
+GOImage 	*go_image_new_for_format   	(char const *format);
+GType		 go_image_type_for_format      	(char const *format);    
 
 guint8 		*go_image_get_pixels 		(GOImage *image);
 void 		 go_image_fill 			(GOImage *image, GOColor color);
diff --git a/goffice/utils/go-style.c b/goffice/utils/go-style.c
index 06a11af..53df6d0 100644
--- a/goffice/utils/go-style.c
+++ b/goffice/utils/go-style.c
@@ -1515,7 +1515,6 @@ go_style_sax_load_fill_image (GsfXMLIn *xin, xmlChar const **attrs)
 	GType type;
 	g_return_if_fail (style->fill.type == GO_STYLE_FILL_NONE);
 	g_return_if_fail (GO_IS_DOC (doc));
-	/* TODO: load the pixels */
 	for (; attrs != NULL && attrs[0] && attrs[1] ; attrs += 2)
 		if (0 == strcmp (attrs[0], "type"))
 			style->fill.image.type = str_as_image_tiling (attrs[1]);



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