added file_utils_load_thumbnail() and file_utils_save_thumbnail().

2006-04-10  Michael Natterer  <mitch@gimp.org>

	* app/file/file-utils.[ch]: added file_utils_load_thumbnail() and
	file_utils_save_thumbnail().

	* tools/pdbgen/pdb/fileops.pdb: remove lots of code and includes
	and use the new functions.

	* app/pdb/fileops_cmds.c: regenerated.
This commit is contained in:
Michael Natterer 2006-04-10 12:59:17 +00:00 committed by Michael Natterer
parent cdf0a2c437
commit f0f8f04515
5 changed files with 115 additions and 131 deletions

View File

@ -1,3 +1,13 @@
2006-04-10 Michael Natterer <mitch@gimp.org>
* app/file/file-utils.[ch]: added file_utils_load_thumbnail() and
file_utils_save_thumbnail().
* tools/pdbgen/pdb/fileops.pdb: remove lots of code and includes
and use the new functions.
* app/pdb/fileops_cmds.c: regenerated.
2006-04-10 Michael Natterer <mitch@gimp.org>
* app/plug-in/plug-in-file.c: some cleanup.

View File

@ -37,12 +37,17 @@
#include <glib-object.h>
#include <glib/gstdio.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include "libgimpbase/gimpbase.h"
#include "libgimpmath/gimpmath.h"
#include "libgimpthumb/gimpthumb.h"
#include "core/core-types.h"
#include "core/gimp.h"
#include "core/gimpimage.h"
#include "core/gimpimagefile.h"
#include "pdb/gimppluginprocedure.h"
@ -366,6 +371,89 @@ file_utils_uri_display_name (const gchar *uri)
return g_strdup (uri);
}
GdkPixbuf *
file_utils_load_thumbnail (const gchar *filename)
{
GimpThumbnail *thumbnail = NULL;
GdkPixbuf *pixbuf = NULL;
gchar *uri;
g_return_val_if_fail (filename != NULL, NULL);
uri = g_filename_to_uri (filename, NULL, NULL);
if (uri)
{
thumbnail = gimp_thumbnail_new ();
gimp_thumbnail_set_uri (thumbnail, uri);
pixbuf = gimp_thumbnail_load_thumb (thumbnail,
GIMP_THUMBNAIL_SIZE_NORMAL,
NULL);
}
g_free (uri);
if (pixbuf)
{
gint width = gdk_pixbuf_get_width (pixbuf);
gint height = gdk_pixbuf_get_height (pixbuf);
if (gdk_pixbuf_get_n_channels (pixbuf) != 3)
{
GdkPixbuf *tmp = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
width, height);
gdk_pixbuf_composite_color (pixbuf, tmp,
0, 0, width, height, 0, 0, 1.0, 1.0,
GDK_INTERP_NEAREST, 255,
0, 0, GIMP_CHECK_SIZE_SM,
0x66666666, 0x99999999);
g_object_unref (pixbuf);
pixbuf = tmp;
}
}
return pixbuf;
}
gboolean
file_utils_save_thumnail (GimpImage *image,
const gchar *filename)
{
const gchar *image_uri;
gboolean success = FALSE;
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
g_return_val_if_fail (filename != NULL, FALSE);
image_uri = gimp_object_get_name (GIMP_OBJECT (image));
if (image_uri)
{
gchar *uri = g_filename_to_uri (filename, NULL, NULL);
if (uri)
{
if ( ! strcmp (uri, image_uri))
{
GimpImagefile *imagefile;
imagefile = gimp_imagefile_new (image->gimp, uri);
success = gimp_imagefile_save_thumbnail (imagefile, NULL,
image);
g_object_unref (imagefile);
}
g_free (uri);
}
}
return success;
}
/* private functions */
static GimpPlugInProcedure *

View File

@ -22,6 +22,9 @@
#define __FILE_UTILS_H__
#include <gdk-pixbuf/gdk-pixbuf.h>
gchar * file_utils_filename_to_uri (GSList *procs,
const gchar *filename,
GError **error);
@ -37,5 +40,9 @@ GimpPlugInProcedure * file_utils_find_proc (GSList *procs,
GimpPlugInProcedure * file_utils_find_proc_by_extension (GSList *procs,
const gchar *uri);
GdkPixbuf * file_utils_load_thumbnail (const gchar *filename);
gboolean file_utils_save_thumnail (GimpImage *image,
const gchar *filename);
#endif /* __FILE_UTILS_H__ */

View File

@ -20,14 +20,12 @@
#include "config.h"
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <string.h>
#include <glib-object.h>
#include "libgimpbase/gimpbase.h"
#include "libgimpconfig/gimpconfig.h"
#include "libgimpthumb/gimpthumb.h"
#include "pdb-types.h"
#include "gimp-pdb.h"
@ -37,7 +35,6 @@
#include "core/gimp-utils.h"
#include "core/gimp.h"
#include "core/gimpimage.h"
#include "core/gimpimagefile.h"
#include "core/gimplayer.h"
#include "file/file-open.h"
#include "file/file-utils.h"
@ -202,42 +199,12 @@ file_load_thumbnail_invoker (GimpProcedure *procedure,
if (success)
{
GimpThumbnail *thumbnail = NULL;
GdkPixbuf *pixbuf = NULL;
gchar *uri;
uri = g_filename_to_uri (filename, NULL, NULL);
if (uri)
{
thumbnail = gimp_thumbnail_new ();
gimp_thumbnail_set_uri (thumbnail, uri);
pixbuf = gimp_thumbnail_load_thumb (thumbnail,
GIMP_THUMBNAIL_SIZE_NORMAL,
NULL);
}
GdkPixbuf *pixbuf = file_utils_load_thumbnail (filename);
if (pixbuf)
{
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
if (gdk_pixbuf_get_n_channels (pixbuf) != 3)
{
GdkPixbuf *tmp = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
width, height);
gdk_pixbuf_composite_color (pixbuf, tmp,
0, 0, width, height, 0, 0, 1.0, 1.0,
GDK_INTERP_NEAREST, 255,
0, 0, GIMP_CHECK_SIZE_SM,
0x66666666, 0x99999999);
g_object_unref (pixbuf);
pixbuf = tmp;
}
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
thumb_data_count = 3 * width * height;
thumb_data = g_memdup (gdk_pixbuf_get_pixels (pixbuf),
thumb_data_count);
@ -246,8 +213,6 @@ file_load_thumbnail_invoker (GimpProcedure *procedure,
}
else
success = FALSE;
g_free (uri);
}
return_vals = gimp_procedure_get_return_values (procedure, success);
@ -279,32 +244,7 @@ file_save_thumbnail_invoker (GimpProcedure *procedure,
if (success)
{
const gchar *image_uri = gimp_object_get_name (GIMP_OBJECT (image));
if (image_uri)
{
gchar *uri = g_filename_to_uri (filename, NULL, NULL);
if (uri)
{
if (! strcmp (uri, image_uri))
{
GimpImagefile *imagefile;
imagefile = gimp_imagefile_new (gimp, uri);
success = gimp_imagefile_save_thumbnail (imagefile, NULL, image);
g_object_unref (imagefile);
}
else
success = FALSE;
g_free (uri);
}
else
success = FALSE;
}
else
success = FALSE;
success = file_utils_save_thumnail (image, filename);
}
return gimp_procedure_get_return_values (procedure, success);

View File

@ -252,42 +252,12 @@ HELP
%invoke = (
code => <<'CODE'
{
GimpThumbnail *thumbnail = NULL;
GdkPixbuf *pixbuf = NULL;
gchar *uri;
uri = g_filename_to_uri (filename, NULL, NULL);
if (uri)
{
thumbnail = gimp_thumbnail_new ();
gimp_thumbnail_set_uri (thumbnail, uri);
pixbuf = gimp_thumbnail_load_thumb (thumbnail,
GIMP_THUMBNAIL_SIZE_NORMAL,
NULL);
}
GdkPixbuf *pixbuf = file_utils_load_thumbnail (filename);
if (pixbuf)
{
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
if (gdk_pixbuf_get_n_channels (pixbuf) != 3)
{
GdkPixbuf *tmp = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
width, height);
gdk_pixbuf_composite_color (pixbuf, tmp,
0, 0, width, height, 0, 0, 1.0, 1.0,
GDK_INTERP_NEAREST, 255,
0, 0, GIMP_CHECK_SIZE_SM,
0x66666666, 0x99999999);
g_object_unref (pixbuf);
pixbuf = tmp;
}
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
thumb_data_count = 3 * width * height;
thumb_data = g_memdup (gdk_pixbuf_get_pixels (pixbuf),
thumb_data_count);
@ -296,8 +266,6 @@ HELP
}
else
success = FALSE;
g_free (uri);
}
CODE
);
@ -327,32 +295,7 @@ HELP
%invoke = (
code => <<'CODE'
{
const gchar *image_uri = gimp_object_get_name (GIMP_OBJECT (image));
if (image_uri)
{
gchar *uri = g_filename_to_uri (filename, NULL, NULL);
if (uri)
{
if (! strcmp (uri, image_uri))
{
GimpImagefile *imagefile;
imagefile = gimp_imagefile_new (gimp, uri);
success = gimp_imagefile_save_thumbnail (imagefile, NULL, image);
g_object_unref (imagefile);
}
else
success = FALSE;
g_free (uri);
}
else
success = FALSE;
}
else
success = FALSE;
success = file_utils_save_thumnail (image, filename);
}
CODE
);
@ -561,12 +504,8 @@ CODE
}
@headers = qw(<gdk-pixbuf/gdk-pixbuf.h>
"libgimpbase/gimpbase.h" "libgimpconfig/gimpconfig.h"
"libgimpthumb/gimpthumb.h"
"core/gimp.h" "core/gimpimagefile.h"
"plug-in/plug-in-file.h"
"file/file-utils.h");
@headers = qw("libgimpbase/gimpbase.h" "libgimpconfig/gimpconfig.h"
"core/gimp.h" "plug-in/plug-in-file.h" "file/file-utils.h");
@procs = qw(file_load file_load_layer file_save
file_load_thumbnail file_save_thumbnail