static void gnm_soi_write_image (SheetObject const *so, char const *format, G_GNUC_UNUSED double resolution, GsfOutput *output, GError **err) { SheetObjectImage *soi = SHEET_OBJECT_IMAGE (so); gboolean res = FALSE; GdkPixbuf *pixbuf = go_image_get_pixbuf (soi->image); if (!soi->type || strcmp (format, soi->type) == 0) { if (soi->bytes.len == 0) { gsize length; guint8 const *data = go_image_get_data (soi->image, &length); res = gsf_output_write (output, length, data); } else res = gsf_output_write (output, soi->bytes.len, soi->bytes.data); } else if (pixbuf) res = gdk_pixbuf_save_to_callback (pixbuf, soi_gdk_pixbuf_save, output, format, err, NULL); if (pixbuf) g_object_unref (pixbuf); if (!res && err && *err == NULL) *err = g_error_new (gsf_output_error_id (), 0, _("Unknown failure while saving image")); }
static void gnm_soi_write_xml_sax (SheetObject const *so, GsfXMLOut *output, G_GNUC_UNUSED GnmConventions const *convs) { SheetObjectImage *soi; g_return_if_fail (IS_SHEET_OBJECT_IMAGE (so)); soi = SHEET_OBJECT_IMAGE (so); gsf_xml_out_add_float (output, "crop-top", soi->crop_top, 3); gsf_xml_out_add_float (output, "crop-bottom", soi->crop_bottom, 3); gsf_xml_out_add_float (output, "crop-left", soi->crop_left, 3); gsf_xml_out_add_float (output, "crop-right", soi->crop_right, 3); gsf_xml_out_start_element (output, "Content"); if (soi->type != NULL) gsf_xml_out_add_cstr (output, "image-type", soi->type); if (soi->image && go_image_get_name (soi->image)) { gsf_xml_out_add_cstr (output, "name", go_image_get_name (soi->image)); if (sheet_object_get_sheet (so)) go_doc_save_image (GO_DOC (sheet_object_get_sheet (so)->workbook), go_image_get_name (soi->image)); else { /* looks that this may happen when pasting from another process, see #687414 */ gsize length; guint8 const *data = go_image_get_data (soi->image, &length); gsf_xml_out_add_uint (output, "size-bytes", length); gsf_xml_out_add_base64 (output, NULL, data, length); } } else { gsf_xml_out_add_uint (output, "size-bytes", soi->bytes.len); gsf_xml_out_add_base64 (output, NULL, soi->bytes.data, soi->bytes.len); } gsf_xml_out_end_element (output); }
static void gnm_soi_write_image (SheetObject const *so, char const *format, G_GNUC_UNUSED double resolution, GsfOutput *output, GError **err) { SheetObjectImage *soi = GNM_SO_IMAGE (so); gboolean res; gsize length; guint8 const *data; g_return_if_fail (soi->image != NULL); data = go_image_get_data (soi->image, &length); res = gsf_output_write (output, length, data); if (!res && err && *err == NULL) *err = g_error_new (gsf_output_error_id (), 0, _("Unknown failure while saving image")); }