app: return a format, not image type from file_open_thumbnail()

create a dummy indexed format if neccessary, which can only be used
for checking with babl_format_is_palette(). Port the rest of
GimpImageFile from GimpImageType to Babl*.
This commit is contained in:
Michael Natterer 2012-04-11 21:54:23 +02:00
parent 7b46656f7d
commit 774b6e3c16
4 changed files with 54 additions and 31 deletions

View File

@ -114,7 +114,7 @@ static void gimp_thumbnail_set_info (GimpThumbnail *thumbnail,
const gchar *mime_type, const gchar *mime_type,
gint width, gint width,
gint height, gint height,
GimpImageType type, const Babl *format,
gint num_layers); gint num_layers);
@ -353,7 +353,7 @@ gimp_imagefile_create_thumbnail (GimpImagefile *imagefile,
gint height = 0; gint height = 0;
const gchar *mime_type = NULL; const gchar *mime_type = NULL;
GError *error = NULL; GError *error = NULL;
GimpImageType type = -1; const Babl *format = NULL;
gint num_layers = -1; gint num_layers = -1;
g_object_ref (imagefile); g_object_ref (imagefile);
@ -361,13 +361,13 @@ gimp_imagefile_create_thumbnail (GimpImagefile *imagefile,
image = file_open_thumbnail (private->gimp, context, progress, image = file_open_thumbnail (private->gimp, context, progress,
thumbnail->image_uri, size, thumbnail->image_uri, size,
&mime_type, &width, &height, &mime_type, &width, &height,
&type, &num_layers, NULL); &format, &num_layers, NULL);
if (image) if (image)
{ {
gimp_thumbnail_set_info (private->thumbnail, gimp_thumbnail_set_info (private->thumbnail,
mime_type, width, height, mime_type, width, height,
type, num_layers); format, num_layers);
} }
else else
{ {
@ -997,7 +997,7 @@ gimp_thumbnail_set_info_from_image (GimpThumbnail *thumbnail,
* @mime_type: MIME type of the image associated with this thumbnail * @mime_type: MIME type of the image associated with this thumbnail
* @width: width of the image associated with this thumbnail * @width: width of the image associated with this thumbnail
* @height: height of the image associated with this thumbnail * @height: height of the image associated with this thumbnail
* @type: type of the image (or -1 if the type is not known) * @format: format of the image (or NULL if the type is not known)
* @num_layers: number of layers in the image * @num_layers: number of layers in the image
* (or -1 if the number of layers is not known) * (or -1 if the number of layers is not known)
* *
@ -1008,7 +1008,7 @@ gimp_thumbnail_set_info (GimpThumbnail *thumbnail,
const gchar *mime_type, const gchar *mime_type,
gint width, gint width,
gint height, gint height,
GimpImageType type, const Babl *format,
gint num_layers) gint num_layers)
{ {
/* peek the thumbnail to make sure that mtime and filesize are set */ /* peek the thumbnail to make sure that mtime and filesize are set */
@ -1020,23 +1020,13 @@ gimp_thumbnail_set_info (GimpThumbnail *thumbnail,
"image-height", height, "image-height", height,
NULL); NULL);
if (type != -1) if (format)
{ g_object_set (thumbnail,
GimpEnumDesc *desc; "image-type", gimp_babl_get_description (format),
NULL);
desc = gimp_enum_get_desc (g_type_class_peek (GIMP_TYPE_IMAGE_TYPE),
type);
if (desc)
g_object_set (thumbnail,
"image-type", desc->value_desc,
NULL);
}
if (num_layers != -1) if (num_layers != -1)
{ g_object_set (thumbnail,
g_object_set (thumbnail, "image-num-layers", num_layers,
"image-num-layers", num_layers, NULL);
NULL);
}
} }

View File

@ -229,7 +229,7 @@ file_open_image (Gimp *gimp,
* @mime_type: return location for image MIME type * @mime_type: return location for image MIME type
* @image_width: return location for image width * @image_width: return location for image width
* @image_height: return location for image height * @image_height: return location for image height
* @type: return location for image type (set to -1 if unknown) * @format: return location for image format (set to NULL if unknown)
* @num_layers: return location for number of layers * @num_layers: return location for number of layers
* (set to -1 if the number of layers is not known) * (set to -1 if the number of layers is not known)
* @error: * @error:
@ -247,7 +247,7 @@ file_open_thumbnail (Gimp *gimp,
const gchar **mime_type, const gchar **mime_type,
gint *image_width, gint *image_width,
gint *image_height, gint *image_height,
GimpImageType *type, const Babl **format,
gint *num_layers, gint *num_layers,
GError **error) GError **error)
{ {
@ -260,13 +260,13 @@ file_open_thumbnail (Gimp *gimp,
g_return_val_if_fail (mime_type != NULL, NULL); g_return_val_if_fail (mime_type != NULL, NULL);
g_return_val_if_fail (image_width != NULL, NULL); g_return_val_if_fail (image_width != NULL, NULL);
g_return_val_if_fail (image_height != NULL, NULL); g_return_val_if_fail (image_height != NULL, NULL);
g_return_val_if_fail (type != NULL, NULL); g_return_val_if_fail (format != NULL, NULL);
g_return_val_if_fail (num_layers != NULL, NULL); g_return_val_if_fail (num_layers != NULL, NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL);
*image_width = 0; *image_width = 0;
*image_height = 0; *image_height = 0;
*type = -1; *format = NULL;
*num_layers = -1; *num_layers = -1;
file_proc = file_procedure_find (gimp->plug_in_manager->load_procs, uri, file_proc = file_procedure_find (gimp->plug_in_manager->load_procs, uri,
@ -320,10 +320,42 @@ file_open_thumbnail (Gimp *gimp,
{ {
gint value = g_value_get_int (&return_vals->values[4]); gint value = g_value_get_int (&return_vals->values[4]);
if (gimp_enum_get_value (GIMP_TYPE_IMAGE_TYPE, value, switch (value)
NULL, NULL, NULL, NULL))
{ {
*type = value; case GIMP_RGB_IMAGE:
*format = babl_format ("R'G'B' u8");
break;
case GIMP_RGBA_IMAGE:
*format = babl_format ("R'G'B'A u8");
break;
case GIMP_GRAY_IMAGE:
*format = babl_format ("Y' u8");
break;
case GIMP_GRAYA_IMAGE:
*format = babl_format ("Y'A u8");
break;
case GIMP_INDEXED_IMAGE:
case GIMP_INDEXEDA_IMAGE:
{
const Babl *rgb;
const Babl *rgba;
babl_new_palette ("-gimp-indexed-format-dummy",
&rgb, &rgba);
if (value == GIMP_INDEXED_IMAGE)
*format = rgb;
else
*format = rgba;
}
break;
default:
break;
} }
} }

View File

@ -41,7 +41,7 @@ GimpImage * file_open_thumbnail (Gimp *gimp,
const gchar **mime_type, const gchar **mime_type,
gint *image_width, gint *image_width,
gint *image_height, gint *image_height,
GimpImageType *type, const Babl **format,
gint *num_layers, gint *num_layers,
GError **error); GError **error);
GimpImage * file_open_with_display (Gimp *gimp, GimpImage * file_open_with_display (Gimp *gimp,

View File

@ -22,6 +22,7 @@
#if HAVE_DBUS_GLIB #if HAVE_DBUS_GLIB
#include <gegl.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <dbus/dbus-glib.h> #include <dbus/dbus-glib.h>