[goffice] GOImage load pixbufs from memory.
- From: Jean BrÃfort <jbrefort src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [goffice] GOImage load pixbufs from memory.
- Date: Fri, 4 Nov 2011 16:16:05 +0000 (UTC)
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]