aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2022-11-10 17:01:09 +0200
committerIgor Pashev <pashev.igor@gmail.com>2022-11-14 15:45:35 +0200
commit81eb6599391bd02e90af312fd1ffd8f859d92f1f (patch)
tree107ac54337f675d7faba59a4f0dd7fbef6ad2f3e
parentee14af5bf4e8b85ea4a45be697e233b3d456e5bf (diff)
downloadgimp-plugin-img-81eb6599391bd02e90af312fd1ffd8f859d92f1f.tar.gz
Replace deprecated in Gimp 2.10 functions
Gimp 2.10 is required now.
-rw-r--r--img-load.c50
-rw-r--r--img-save.c30
-rw-r--r--plugin-img.c16
3 files changed, 59 insertions, 37 deletions
diff --git a/img-load.c b/img-load.c
index 1aa27e9..fafe291 100644
--- a/img-load.c
+++ b/img-load.c
@@ -41,21 +41,22 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error)
FILE *fp;
size_t nread;
size_t src_size;
- guint8 *src, *dest;
+ guint8 *src, *dest, *buf;
FileHeader hdr;
ColorKey ckey;
guint32 row, col, width, height;
gint32 frame, nframes, *frames;
- gchar buf[20];
+ gchar layer_name[20];
gint32 image, layer;
- GimpDrawable *drawable;
- GimpPixelRgn pixel_rgn;
- GimpImageType image_type;
+ GeglBuffer *gegl_buffer;
+ GimpImageType layer_type;
+ const Babl *format;
ckey.is = 0;
ckey.R = 0;
ckey.G = 0;
ckey.B = 0;
+
gimp_progress_init_printf ("Opening '%s'",
gimp_filename_to_utf8 (filename));
@@ -107,11 +108,13 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error)
{
case FMT_RGB565:
src_size *= 2;
- image_type = GIMP_RGB_IMAGE;
+ layer_type = GIMP_RGB_IMAGE;
+ format = babl_format ("R'G'B' u8");
break;
case FMT_RGB:
src_size *= 3;
- image_type = GIMP_RGB_IMAGE;
+ layer_type = GIMP_RGB_IMAGE;
+ format = babl_format ("R'G'B' u8");
/*
* Read color key
*/
@@ -130,7 +133,8 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error)
break;
case FMT_RGBA:
src_size *= 4; /* Alpha only for RGBA */
- image_type = GIMP_RGBA_IMAGE;
+ layer_type = GIMP_RGBA_IMAGE;
+ format = babl_format ("R'G'B'A u8");
break;
default:
D (("Invalid file format: %1u\n", hdr.fmt));
@@ -147,7 +151,10 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error)
/*
* We are ready to make image with layers
*/
- image = gimp_image_new (width, height, GIMP_RGB);
+ image =
+ gimp_image_new_with_precision (width, height, GIMP_RGB,
+ GIMP_PRECISION_U8_GAMMA);
+ gimp_image_undo_disable (image);
gimp_image_set_filename (image, filename);
frame = 0;
@@ -162,14 +169,11 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error)
gimp_progress_update ((gdouble) frame / (gdouble) nframes);
D (("Reading frame #%u of %u (%ux%u, %lu bytes)\n", frame, nframes,
width, height, src_size));
- g_snprintf (buf, sizeof (buf), "#%i", frame);
+ g_snprintf (layer_name, sizeof (layer_name), "#%i", frame);
layer =
- gimp_layer_new (image, buf, width, height, image_type, 100,
+ gimp_layer_new (image, layer_name, width, height, layer_type, 100,
GIMP_NORMAL_MODE);
- gimp_image_add_layer (image, layer, frame - 1);
- drawable = gimp_drawable_get (layer);
- gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height,
- TRUE, FALSE);
+ gegl_buffer = gimp_drawable_get_buffer (layer);
nread = fread ((char *) src, src_size, 1, fp);
if (nread != 1)
@@ -185,18 +189,20 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error)
fclose (fp);
return -1;
}
+
if (hdr.fmt == FMT_RGB565)
{
img_map_rgb565_to_rgb (src, dest, src_size);
- gimp_pixel_rgn_set_rect (&pixel_rgn, (const guchar *) dest, 0,
- 0, width, height);
+ buf = dest;
}
else
- {
- gimp_pixel_rgn_set_rect (&pixel_rgn, (const guchar *) src, 0, 0,
- width, height);
- }
- gimp_drawable_detach (drawable);
+ buf = src;
+
+ gegl_buffer_set (gegl_buffer,
+ GEGL_RECTANGLE (0, 0, width, height), 0,
+ format, buf, GEGL_AUTO_ROWSTRIDE);
+ g_object_unref (gegl_buffer);
+ gimp_image_insert_layer (image, layer, -1, frame - 1);
}
}
diff --git a/img-save.c b/img-save.c
index a94ae4b..f3dca61 100644
--- a/img-save.c
+++ b/img-save.c
@@ -272,13 +272,13 @@ img_save_image (gint32 image, const ImageParasite * plugin,
const gchar * filename, GError ** error)
{
FILE *fp;
- GimpPixelRgn pixel_rgn;
- GimpDrawable *drawable = NULL;
gint *layers = NULL, nlayers;
size_t nwritten;
guint8 *data = NULL, *pixels = NULL;
+ GeglBuffer *gegl_buffer;
size_t data_size, npixels;
gint i, width, height;
+ const Babl *format;
FileHeader hdr;
/*
@@ -341,6 +341,7 @@ img_save_image (gint32 image, const ImageParasite * plugin,
{
case FMT_RGB565:
data_size *= 2;
+ format = babl_format ("R'G'B' u8");
break;
case FMT_RGB:
@@ -359,6 +360,7 @@ img_save_image (gint32 image, const ImageParasite * plugin,
return GIMP_PDB_EXECUTION_ERROR;
}
data_size *= 3;
+ format = babl_format ("R'G'B' u8");
break;
case FMT_RGBA:
@@ -367,7 +369,15 @@ img_save_image (gint32 image, const ImageParasite * plugin,
"(%1u, %1u, %1u) to full transparent\n", plugin->ckey.R,
plugin->ckey.G, plugin->ckey.B)););
data_size *= 4;
+ format = babl_format ("R'G'B'A u8");
break;
+
+ default:
+ D (("Invalid file format: %1u\n", hdr.fmt));
+ g_set_error (error, 0, 0, "Invalid file format: %1u\n", hdr.fmt);
+ fclose (fp);
+ g_free (layers);
+ return -1;
}
/*
@@ -378,12 +388,16 @@ img_save_image (gint32 image, const ImageParasite * plugin,
for (i = 0; i < nlayers; i++)
{
gimp_progress_update ((gdouble) i / (gdouble) nlayers);
- drawable = gimp_drawable_get (layers[i]);
- gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE,
- FALSE);
- gimp_pixel_rgn_get_rect (&pixel_rgn, (guchar *) pixels, 0, 0, width,
- height);
- D (("Writing frame #%u of %u (%lu bytes)\n", i + 1, nlayers, data_size));
+ gegl_buffer = gimp_drawable_get_buffer (layers[i]);
+
+ gegl_buffer_get (gegl_buffer, GEGL_RECTANGLE (0, 0,
+ width, height), 1.0,
+ format, pixels, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+
+ g_object_unref (gegl_buffer);
+
+ D (("Writing frame #%u of %u (%lu bytes)\n", i + 1, nlayers,
+ data_size));
/*
* Allow different image type for different layers
*/
diff --git a/plugin-img.c b/plugin-img.c
index b4b19d7..d89ab6a 100644
--- a/plugin-img.c
+++ b/plugin-img.c
@@ -11,10 +11,12 @@ img_set_parasite (gint32 image, const ImageParasite * p)
D (("Setting parasite for %u: format: %s (%1u), "
"color key: %s (%1u, %1u, %1u)\n", image, FMT[p->format], p->format,
(p->ckey.is) ? "yes" : "no", p->ckey.R, p->ckey.G, p->ckey.B));
- gimp_image_parasite_detach (image, PARASITE_ORIG_FILE);
- gimp_image_attach_new_parasite (image, PARASITE_ORIG_FILE,
- GIMP_PARASITE_PERSISTENT,
- sizeof (ImageParasite), p);
+ gimp_image_detach_parasite (image, PARASITE_ORIG_FILE);
+
+ const GimpParasite *gp =
+ gimp_parasite_new (PARASITE_ORIG_FILE, GIMP_PARASITE_PERSISTENT,
+ sizeof (*p), p);
+ gimp_image_attach_parasite (image, gp);
}
static void
@@ -22,12 +24,12 @@ img_get_parasite (gint32 image, ImageParasite * p)
{
GimpParasite *gp = NULL;
- gp = gimp_image_parasite_find (image, PARASITE_ORIG_FILE);
+ gp = gimp_image_get_parasite (image, PARASITE_ORIG_FILE);
if (gp != NULL)
{
p->format = ((ImageParasite *) (gp->data))->format;
p->ckey = ((ImageParasite *) (gp->data))->ckey;
- D (("Setting parasite for %u: format: %s (%1u), "
+ D (("Getting parasite for %u: format: %s (%1u), "
"color key: %s (%1u, %1u, %1u)\n", image, FMT[p->format], p->format,
(p->ckey.is) ? "yes" : "no", p->ckey.R, p->ckey.G, p->ckey.B));
@@ -92,10 +94,10 @@ run (const gchar * name, gint nparams, const GimpParam * param,
GimpRunMode run_mode;
GimpPDBStatusType status = GIMP_PDB_SUCCESS;
GimpExportReturn export = GIMP_EXPORT_CANCEL;
-
GError *error = NULL;
run_mode = param[0].data.d_int32;
+ gegl_init (NULL, NULL);
*nreturn_vals = 1;
*return_vals = values;