mirror of https://github.com/GNOME/gimp.git
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:
parent
cdf0a2c437
commit
f0f8f04515
10
ChangeLog
10
ChangeLog
|
@ -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.
|
||||
|
|
|
@ -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 *
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue