mirror of https://github.com/GNOME/gimp.git
made gimp_imagefile_save_thumbnail() return a gboolean indicating success.
2002-04-19 Michael Natterer <mitch@gimp.org> * app/core/gimpimagefile.[ch]: made gimp_imagefile_save_thumbnail() return a gboolean indicating success. * app/file/file-save.c * tools/pdbgen/pdb/fileops.pdb: use gimp_imagefile_save_thumbnail() to save thumbnails. * app/file/file-utils.[ch]: removed the .xvpics thumbnail saving code. * app/pdb/fileops_cmds.c: regenerated.
This commit is contained in:
parent
84ee76d5ee
commit
095314f01d
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2002-04-19 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
|
* app/core/gimpimagefile.[ch]: made gimp_imagefile_save_thumbnail()
|
||||||
|
return a gboolean indicating success.
|
||||||
|
|
||||||
|
* app/file/file-save.c
|
||||||
|
* tools/pdbgen/pdb/fileops.pdb: use gimp_imagefile_save_thumbnail()
|
||||||
|
to save thumbnails.
|
||||||
|
|
||||||
|
* app/file/file-utils.[ch]: removed the .xvpics thumbnail saving code.
|
||||||
|
|
||||||
|
* app/pdb/fileops_cmds.c: regenerated.
|
||||||
|
|
||||||
2002-04-19 Michael Natterer <mitch@gimp.org>
|
2002-04-19 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
* app/file/file-open.[ch]: all functions return the opened image
|
* app/file/file-open.[ch]: all functions return the opened image
|
||||||
|
|
|
@ -98,7 +98,7 @@ static TempBuf * gimp_imagefile_get_new_preview (GimpViewable *viewable,
|
||||||
|
|
||||||
static TempBuf * gimp_imagefile_read_png_thumb (GimpImagefile *imagefile,
|
static TempBuf * gimp_imagefile_read_png_thumb (GimpImagefile *imagefile,
|
||||||
gint size);
|
gint size);
|
||||||
static void gimp_imagefile_save_png_thumb (GimpImagefile *imagefile,
|
static gboolean gimp_imagefile_save_png_thumb (GimpImagefile *imagefile,
|
||||||
GimpImage *gimage,
|
GimpImage *gimage,
|
||||||
const gchar *thumb_name,
|
const gchar *thumb_name,
|
||||||
time_t image_mtime,
|
time_t image_mtime,
|
||||||
|
@ -376,39 +376,42 @@ gimp_imagefile_create_thumbnail (GimpImagefile *imagefile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
gboolean
|
||||||
gimp_imagefile_save_thumbnail (GimpImagefile *imagefile,
|
gimp_imagefile_save_thumbnail (GimpImagefile *imagefile,
|
||||||
GimpImage *gimage)
|
GimpImage *gimage)
|
||||||
{
|
{
|
||||||
const gchar *uri;
|
const gchar *uri;
|
||||||
|
const gchar *image_uri;
|
||||||
gchar *filename;
|
gchar *filename;
|
||||||
gchar *thumb_name;
|
gchar *thumb_name;
|
||||||
time_t image_mtime;
|
time_t image_mtime;
|
||||||
off_t image_size;
|
off_t image_size;
|
||||||
|
gboolean success = FALSE;
|
||||||
|
|
||||||
g_return_if_fail (GIMP_IS_IMAGEFILE (imagefile));
|
g_return_val_if_fail (GIMP_IS_IMAGEFILE (imagefile), FALSE);
|
||||||
g_return_if_fail (GIMP_IS_IMAGE (gimage));
|
g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
|
||||||
|
|
||||||
uri = gimp_object_get_name (GIMP_OBJECT (imagefile));
|
uri = gimp_object_get_name (GIMP_OBJECT (imagefile));
|
||||||
|
image_uri = gimp_object_get_name (GIMP_OBJECT (imagefile));
|
||||||
|
|
||||||
g_return_if_fail (! strcmp (uri, gimp_object_get_name (GIMP_OBJECT (gimage))));
|
g_return_val_if_fail (uri && image_uri && ! strcmp (uri, image_uri), FALSE);
|
||||||
|
|
||||||
filename = g_filename_from_uri (uri, NULL, NULL);
|
filename = g_filename_from_uri (uri, NULL, NULL);
|
||||||
|
|
||||||
/* no thumbnails of remote images :-( */
|
/* no thumbnails of remote images :-( */
|
||||||
if (! filename)
|
if (! filename)
|
||||||
return;
|
return FALSE;
|
||||||
|
|
||||||
thumb_name =
|
thumb_name =
|
||||||
gimp_imagefile_png_thumb_path (uri, GIMP_IMAGEFILE_THUMB_SIZE_NORMAL);
|
gimp_imagefile_png_thumb_path (uri, GIMP_IMAGEFILE_THUMB_SIZE_NORMAL);
|
||||||
|
|
||||||
/* the thumbnail directory doesn't exist and couldn't be created */
|
/* the thumbnail directory doesn't exist and couldn't be created */
|
||||||
if (! thumb_name)
|
if (! thumb_name)
|
||||||
return;
|
return FALSE;
|
||||||
|
|
||||||
if (gimp_imagefile_test (filename, &image_mtime, &image_size))
|
if (gimp_imagefile_test (filename, &image_mtime, &image_size))
|
||||||
{
|
{
|
||||||
gimp_imagefile_save_png_thumb (imagefile,
|
success = gimp_imagefile_save_png_thumb (imagefile,
|
||||||
gimage,
|
gimage,
|
||||||
thumb_name,
|
thumb_name,
|
||||||
image_mtime,
|
image_mtime,
|
||||||
|
@ -416,6 +419,8 @@ gimp_imagefile_save_thumbnail (GimpImagefile *imagefile,
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (thumb_name);
|
g_free (thumb_name);
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -745,7 +750,7 @@ gimp_imagefile_read_png_thumb (GimpImagefile *imagefile,
|
||||||
return temp_buf;
|
return temp_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
gimp_imagefile_save_png_thumb (GimpImagefile *imagefile,
|
gimp_imagefile_save_png_thumb (GimpImagefile *imagefile,
|
||||||
GimpImage *gimage,
|
GimpImage *gimage,
|
||||||
const gchar *thumb_name,
|
const gchar *thumb_name,
|
||||||
|
@ -756,6 +761,7 @@ gimp_imagefile_save_png_thumb (GimpImagefile *imagefile,
|
||||||
gchar *temp_name = NULL;
|
gchar *temp_name = NULL;
|
||||||
GdkPixbuf *pixbuf;
|
GdkPixbuf *pixbuf;
|
||||||
gint width, height;
|
gint width, height;
|
||||||
|
gboolean success = FALSE;
|
||||||
|
|
||||||
uri = gimp_object_get_name (GIMP_OBJECT (imagefile));
|
uri = gimp_object_get_name (GIMP_OBJECT (imagefile));
|
||||||
|
|
||||||
|
@ -809,7 +815,7 @@ gimp_imagefile_save_png_thumb (GimpImagefile *imagefile,
|
||||||
s_str = g_strdup_printf ("%ld", image_size);
|
s_str = g_strdup_printf ("%ld", image_size);
|
||||||
l_str = g_strdup_printf ("%d", gimage->layers->num_children);
|
l_str = g_strdup_printf ("%d", gimage->layers->num_children);
|
||||||
|
|
||||||
if (! gdk_pixbuf_save (pixbuf, thumb_name, "png", &error,
|
success = gdk_pixbuf_save (pixbuf, thumb_name, "png", &error,
|
||||||
TAG_DESCRIPTION, desc,
|
TAG_DESCRIPTION, desc,
|
||||||
TAG_SOFTWARE, "The GIMP",
|
TAG_SOFTWARE, "The GIMP",
|
||||||
TAG_THUMB_URI, uri,
|
TAG_THUMB_URI, uri,
|
||||||
|
@ -819,7 +825,9 @@ gimp_imagefile_save_png_thumb (GimpImagefile *imagefile,
|
||||||
TAG_THUMB_IMAGE_HEIGHT, h_str,
|
TAG_THUMB_IMAGE_HEIGHT, h_str,
|
||||||
TAG_THUMB_GIMP_TYPE, type_str,
|
TAG_THUMB_GIMP_TYPE, type_str,
|
||||||
TAG_THUMB_GIMP_LAYERS, l_str,
|
TAG_THUMB_GIMP_LAYERS, l_str,
|
||||||
NULL))
|
NULL);
|
||||||
|
|
||||||
|
if (! success)
|
||||||
{
|
{
|
||||||
g_message (_("Couldn't write thumbnail for '%s'\nas '%s'.\n%s"),
|
g_message (_("Couldn't write thumbnail for '%s'\nas '%s'.\n%s"),
|
||||||
uri, thumb_name, error->message);
|
uri, thumb_name, error->message);
|
||||||
|
@ -839,6 +847,8 @@ gimp_imagefile_save_png_thumb (GimpImagefile *imagefile,
|
||||||
g_free (temp_name);
|
g_free (temp_name);
|
||||||
|
|
||||||
gimp_imagefile_update (imagefile);
|
gimp_imagefile_update (imagefile);
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *
|
static const gchar *
|
||||||
|
|
|
@ -83,7 +83,7 @@ GType gimp_imagefile_get_type (void) G_GNUC_CONST;
|
||||||
GimpImagefile * gimp_imagefile_new (const gchar *uri);
|
GimpImagefile * gimp_imagefile_new (const gchar *uri);
|
||||||
void gimp_imagefile_update (GimpImagefile *imagefile);
|
void gimp_imagefile_update (GimpImagefile *imagefile);
|
||||||
void gimp_imagefile_create_thumbnail (GimpImagefile *imagefile);
|
void gimp_imagefile_create_thumbnail (GimpImagefile *imagefile);
|
||||||
void gimp_imagefile_save_thumbnail (GimpImagefile *imagefile,
|
gboolean gimp_imagefile_save_thumbnail (GimpImagefile *imagefile,
|
||||||
GimpImage *gimage);
|
GimpImage *gimage);
|
||||||
const gchar * gimp_imagefile_get_description (GimpImagefile *imagefile);
|
const gchar * gimp_imagefile_get_description (GimpImagefile *imagefile);
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
#include "core/gimpdocuments.h"
|
#include "core/gimpdocuments.h"
|
||||||
#include "core/gimpdrawable.h"
|
#include "core/gimpdrawable.h"
|
||||||
#include "core/gimpimage.h"
|
#include "core/gimpimage.h"
|
||||||
|
#include "core/gimpimagefile.h"
|
||||||
|
|
||||||
#include "pdb/procedural_db.h"
|
#include "pdb/procedural_db.h"
|
||||||
|
|
||||||
|
@ -162,30 +163,38 @@ file_save (GimpImage *gimage,
|
||||||
|
|
||||||
if (status == GIMP_PDB_SUCCESS)
|
if (status == GIMP_PDB_SUCCESS)
|
||||||
{
|
{
|
||||||
|
GimpImagefile *imagefile;
|
||||||
|
|
||||||
/* set this image to clean */
|
/* set this image to clean */
|
||||||
gimp_image_clean_all (gimage);
|
gimp_image_clean_all (gimage);
|
||||||
|
|
||||||
gimp_documents_add (gimage->gimp, uri);
|
imagefile = gimp_documents_add (gimage->gimp, uri);
|
||||||
|
|
||||||
/* use the same plug-in for this image next time */
|
|
||||||
/* DISABLED - gets stuck on first saved format... needs
|
|
||||||
attention --Adam */
|
|
||||||
/* gimage_set_save_proc(gimage, file_proc); */
|
|
||||||
|
|
||||||
/* Write a thumbnail for the saved image, where appropriate */
|
|
||||||
if (gimage->gimp->config->write_thumbnails)
|
|
||||||
{
|
|
||||||
TempBuf *tempbuf;
|
|
||||||
|
|
||||||
tempbuf = make_thumb_tempbuf (gimage);
|
|
||||||
file_save_thumbnail (gimage, filename, tempbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (set_uri)
|
if (set_uri)
|
||||||
{
|
{
|
||||||
/* set the image title */
|
/* set the image title */
|
||||||
gimp_image_set_uri (gimage, uri);
|
gimp_image_set_uri (gimage, uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Write a thumbnail for the saved image, where appropriate */
|
||||||
|
if (gimage->gimp->config->write_thumbnails)
|
||||||
|
{
|
||||||
|
if (set_uri)
|
||||||
|
{
|
||||||
|
gimp_imagefile_save_thumbnail (imagefile, gimage);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gchar *saved_uri;
|
||||||
|
|
||||||
|
saved_uri = GIMP_OBJECT (gimage)->name;
|
||||||
|
GIMP_OBJECT (gimage)->name = (gchar *) uri;
|
||||||
|
|
||||||
|
gimp_imagefile_save_thumbnail (imagefile, gimage);
|
||||||
|
|
||||||
|
GIMP_OBJECT (gimage)->name = saved_uri;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (return_vals);
|
g_free (return_vals);
|
||||||
|
|
|
@ -598,42 +598,6 @@ file_check_magic_list (GSList *magics_list,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* .xvpics thumbnail stuff */
|
|
||||||
|
|
||||||
TempBuf *
|
|
||||||
make_thumb_tempbuf (GimpImage *gimage)
|
|
||||||
{
|
|
||||||
gint w, h;
|
|
||||||
|
|
||||||
if (gimage->width<=80 && gimage->height<=60)
|
|
||||||
{
|
|
||||||
w = gimage->width;
|
|
||||||
h = gimage->height;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Ratio molesting to fit within .xvpic thumbnail size limits */
|
|
||||||
if (60 * gimage->width < 80 * gimage->height)
|
|
||||||
{
|
|
||||||
h = 60;
|
|
||||||
w = (60 * gimage->width) / gimage->height;
|
|
||||||
if (w == 0)
|
|
||||||
w = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
w = 80;
|
|
||||||
h = (80 * gimage->height) / gimage->width;
|
|
||||||
if (h == 0)
|
|
||||||
h = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*printf("tn: %d x %d -> ", w, h);fflush(stdout);*/
|
|
||||||
|
|
||||||
return gimp_viewable_get_preview (GIMP_VIEWABLE (gimage), w, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The readXVThumb function source may be re-used under
|
/* The readXVThumb function source may be re-used under
|
||||||
the XFree86-style license. <adam@gimp.org> */
|
the XFree86-style license. <adam@gimp.org> */
|
||||||
guchar *
|
guchar *
|
||||||
|
@ -720,147 +684,3 @@ readXVThumb (const gchar *fnam,
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
|
||||||
file_save_thumbnail (GimpImage *gimage,
|
|
||||||
const gchar *full_source_filename,
|
|
||||||
TempBuf *tempbuf)
|
|
||||||
{
|
|
||||||
gint i,j;
|
|
||||||
gint w,h;
|
|
||||||
guchar *tbd;
|
|
||||||
gchar *pathname;
|
|
||||||
gchar *filename;
|
|
||||||
gchar *xvpathname;
|
|
||||||
gchar *thumbnailname;
|
|
||||||
GimpImageBaseType basetype;
|
|
||||||
FILE *fp;
|
|
||||||
struct stat statbuf;
|
|
||||||
|
|
||||||
if (stat (full_source_filename, &statbuf) != 0)
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
pathname = g_path_get_dirname (full_source_filename);
|
|
||||||
filename = g_path_get_basename (full_source_filename);
|
|
||||||
|
|
||||||
xvpathname = g_build_filename (pathname, ".xvpics", NULL);
|
|
||||||
thumbnailname = g_build_filename (xvpathname, filename, NULL);
|
|
||||||
|
|
||||||
tbd = temp_buf_data (tempbuf);
|
|
||||||
|
|
||||||
w = tempbuf->width;
|
|
||||||
h = tempbuf->height;
|
|
||||||
/*printf("tn: %d x %d\n", w, h);fflush(stdout);*/
|
|
||||||
|
|
||||||
mkdir (xvpathname, 0755);
|
|
||||||
|
|
||||||
fp = fopen (thumbnailname, "wb");
|
|
||||||
g_free (pathname);
|
|
||||||
g_free (filename);
|
|
||||||
g_free (xvpathname);
|
|
||||||
g_free (thumbnailname);
|
|
||||||
|
|
||||||
if (fp)
|
|
||||||
{
|
|
||||||
basetype = gimp_image_base_type (gimage);
|
|
||||||
|
|
||||||
fprintf (fp,
|
|
||||||
"P7 332\n#IMGINFO:%dx%d %s (%d %s)\n"
|
|
||||||
"#END_OF_COMMENTS\n%d %d 255\n",
|
|
||||||
gimage->width, gimage->height,
|
|
||||||
(basetype == GIMP_RGB) ? "RGB" :
|
|
||||||
(basetype == GIMP_GRAY) ? "Greyscale" :
|
|
||||||
(basetype == GIMP_INDEXED) ? "Indexed" :
|
|
||||||
"(UNKNOWN COLOUR TYPE)",
|
|
||||||
(int)statbuf.st_size,
|
|
||||||
(statbuf.st_size == 1) ? "byte" : "bytes",
|
|
||||||
w, h);
|
|
||||||
|
|
||||||
switch (basetype)
|
|
||||||
{
|
|
||||||
case GIMP_INDEXED:
|
|
||||||
case GIMP_RGB:
|
|
||||||
for (i=0; i<h; i++)
|
|
||||||
{
|
|
||||||
/* Do a cheap unidirectional error-spread to look better */
|
|
||||||
gint rerr=0, gerr=0, berr=0, a;
|
|
||||||
|
|
||||||
for (j=0; j<w; j++)
|
|
||||||
{
|
|
||||||
gint32 r,g,b;
|
|
||||||
|
|
||||||
if (128 & *(tbd + 3))
|
|
||||||
{
|
|
||||||
r = *(tbd++) + rerr;
|
|
||||||
g = *(tbd++) + gerr;
|
|
||||||
b = *(tbd++) + berr;
|
|
||||||
tbd++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
a = (( (i^j) & 4 ) << 5) | 64; /* cute. */
|
|
||||||
r = a + rerr;
|
|
||||||
g = a + gerr;
|
|
||||||
b = a + berr;
|
|
||||||
tbd += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = CLAMP0255 (r);
|
|
||||||
g = CLAMP0255 (g);
|
|
||||||
b = CLAMP0255 (b);
|
|
||||||
|
|
||||||
fputc(((r>>5)<<5) | ((g>>5)<<2) | (b>>6), fp);
|
|
||||||
|
|
||||||
rerr = r - ( (r>>5) * 255 ) / 7;
|
|
||||||
gerr = g - ( (g>>5) * 255 ) / 7;
|
|
||||||
berr = b - ( (b>>6) * 255 ) / 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GIMP_GRAY:
|
|
||||||
for (i=0; i<h; i++)
|
|
||||||
{
|
|
||||||
/* Do a cheap unidirectional error-spread to look better */
|
|
||||||
gint b3err=0, b2err=0, v, a;
|
|
||||||
|
|
||||||
for (j=0; j<w; j++)
|
|
||||||
{
|
|
||||||
gint32 b3, b2;
|
|
||||||
|
|
||||||
v = *(tbd++);
|
|
||||||
a = *(tbd++);
|
|
||||||
|
|
||||||
if (!(128 & a))
|
|
||||||
v = (( (i^j) & 4 ) << 5) | 64;
|
|
||||||
|
|
||||||
b2 = v + b2err;
|
|
||||||
b3 = v + b3err;
|
|
||||||
|
|
||||||
b2 = CLAMP0255 (b2);
|
|
||||||
b3 = CLAMP0255 (b3);
|
|
||||||
|
|
||||||
fputc(((b3>>5)<<5) | ((b3>>5)<<2) | (b2>>6), fp);
|
|
||||||
|
|
||||||
b2err = b2 - ( (b2>>6) * 255 ) / 3;
|
|
||||||
b3err = b3 - ( (b3>>5) * 255 ) / 7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
g_warning ("%s: Unknown image type.", G_STRLOC);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose (fp);
|
|
||||||
}
|
|
||||||
else /* Error writing thumbnail */
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
|
@ -34,14 +34,10 @@ gchar * file_utils_uri_to_utf8_filename (const gchar *uri);
|
||||||
|
|
||||||
/* .xvpics thumbnail stuff */
|
/* .xvpics thumbnail stuff */
|
||||||
|
|
||||||
TempBuf * make_thumb_tempbuf (GimpImage *gimage);
|
|
||||||
guchar * readXVThumb (const gchar *fnam,
|
guchar * readXVThumb (const gchar *fnam,
|
||||||
gint *w,
|
gint *w,
|
||||||
gint *h,
|
gint *h,
|
||||||
gchar **imginfo /* caller frees if != NULL */);
|
gchar **imginfo /* caller frees if != NULL */);
|
||||||
gboolean file_save_thumbnail (GimpImage *gimage,
|
|
||||||
const char *full_source_filename,
|
|
||||||
TempBuf *tempbuf);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __FILE_UTILS_H__ */
|
#endif /* __FILE_UTILS_H__ */
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include "base/base-config.h"
|
#include "base/base-config.h"
|
||||||
#include "core/gimp.h"
|
#include "core/gimp.h"
|
||||||
#include "core/gimpimage.h"
|
#include "core/gimpimage.h"
|
||||||
|
#include "core/gimpimagefile.h"
|
||||||
#include "file/file-utils.h"
|
#include "file/file-utils.h"
|
||||||
#include "plug-in/plug-in-proc.h"
|
#include "plug-in/plug-in-proc.h"
|
||||||
#include "plug-in/plug-in.h"
|
#include "plug-in/plug-in.h"
|
||||||
|
@ -330,7 +331,9 @@ file_save_thumbnail_invoker (Gimp *gimp,
|
||||||
gboolean success = TRUE;
|
gboolean success = TRUE;
|
||||||
GimpImage *gimage;
|
GimpImage *gimage;
|
||||||
gchar *filename;
|
gchar *filename;
|
||||||
TempBuf *thumb;
|
GimpImagefile *imagefile;
|
||||||
|
gchar *uri;
|
||||||
|
const gchar *image_uri;
|
||||||
|
|
||||||
gimage = gimp_image_get_by_ID (gimp, args[0].value.pdb_int);
|
gimage = gimp_image_get_by_ID (gimp, args[0].value.pdb_int);
|
||||||
if (gimage == NULL)
|
if (gimage == NULL)
|
||||||
|
@ -342,9 +345,31 @@ file_save_thumbnail_invoker (Gimp *gimp,
|
||||||
|
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
thumb = make_thumb_tempbuf (gimage);
|
image_uri = gimp_object_get_name (GIMP_OBJECT (gimage));
|
||||||
if (! file_save_thumbnail (gimage, filename, thumb))
|
if (! image_uri)
|
||||||
success = FALSE;
|
success = FALSE;
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
uri = g_filename_to_uri (filename, NULL, NULL);
|
||||||
|
if (! uri)
|
||||||
|
success = FALSE;
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
if (strcmp (uri, image_uri))
|
||||||
|
success = FALSE;
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
imagefile = gimp_imagefile_new (uri);
|
||||||
|
success = gimp_imagefile_save_thumbnail (imagefile, gimage);
|
||||||
|
g_object_unref (G_OBJECT (imagefile));
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return procedural_db_return_args (&file_save_thumbnail_proc, success);
|
return procedural_db_return_args (&file_save_thumbnail_proc, success);
|
||||||
|
|
|
@ -242,12 +242,35 @@ HELP
|
||||||
);
|
);
|
||||||
|
|
||||||
%invoke = (
|
%invoke = (
|
||||||
vars => [ 'TempBuf *thumb' ],
|
vars => [ 'GimpImagefile *imagefile', 'gchar *uri',
|
||||||
|
'const gchar *image_uri' ],
|
||||||
code => <<'CODE'
|
code => <<'CODE'
|
||||||
{
|
{
|
||||||
thumb = make_thumb_tempbuf (gimage);
|
image_uri = gimp_object_get_name (GIMP_OBJECT (gimage));
|
||||||
if (! file_save_thumbnail (gimage, filename, thumb))
|
if (! image_uri)
|
||||||
success = FALSE;
|
success = FALSE;
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
uri = g_filename_to_uri (filename, NULL, NULL);
|
||||||
|
if (! uri)
|
||||||
|
success = FALSE;
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
if (strcmp (uri, image_uri))
|
||||||
|
success = FALSE;
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
imagefile = gimp_imagefile_new (uri);
|
||||||
|
success = gimp_imagefile_save_thumbnail (imagefile, gimage);
|
||||||
|
g_object_unref (G_OBJECT (imagefile));
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
CODE
|
CODE
|
||||||
);
|
);
|
||||||
|
@ -415,7 +438,7 @@ CODE
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@headers = qw(<sys/types.h> <unistd.h> "core/gimp.h"
|
@headers = qw(<sys/types.h> <unistd.h> "core/gimp.h" "core/gimpimagefile.h"
|
||||||
"plug-in/plug-in.h" "plug-in/plug-ins.h" "plug-in/plug-in-proc.h"
|
"plug-in/plug-in.h" "plug-in/plug-ins.h" "plug-in/plug-in-proc.h"
|
||||||
"file/file-utils.h");
|
"file/file-utils.h");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue