Update of /cvsroot/ufraw/ufraw
In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv13312
Modified Files:
configure.ac ufraw-gimp.c
Log Message:
Add experimental 16-bit support for GIMP 2.9+. Based on patch by Nils
Philippsen.
Index: configure.ac
===================================================================
RCS file: /cvsroot/ufraw/ufraw/configure.ac,v
retrieving revision 1.163
retrieving revision 1.164
diff -u -d -r1.163 -r1.164
--- configure.ac 2 Feb 2013 17:00:17 -0000 1.163
+++ configure.ac 21 Feb 2013 05:00:07 -0000 1.164
@@ -160,6 +160,9 @@
PKG_CHECK_MODULES(GIMP_2_6, gimpui-2.0 >= 2.6.0,
[ AC_DEFINE_UNQUOTED(HAVE_GIMP_2_6, 1, have Gimp 2.6 or later) ],
[ AC_DEFINE_UNQUOTED(HAVE_GIMP_2_6, 0, have Gimp 2.6 or later) ])
+ PKG_CHECK_MODULES(GIMP_2_9, gimpui-2.0 >= 2.9.0,
+ [ AC_DEFINE_UNQUOTED(HAVE_GIMP_2_9, 1, have Gimp 2.9 or later) ],
+ [ AC_DEFINE_UNQUOTED(HAVE_GIMP_2_9, 0, have Gimp 2.9 or later) ])
fi
AC_ARG_WITH([cinepaint],
Index: ufraw-gimp.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw-gimp.c,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -d -r1.73 -r1.74
--- ufraw-gimp.c 1 Jan 2013 04:00:17 -0000 1.73
+++ ufraw-gimp.c 21 Feb 2013 05:00:07 -0000 1.74
@@ -25,14 +25,25 @@
/* Fix some compatibility issues between CinePaint and GIMP */
typedef GimpRunModeType GimpRunMode;
#define PLUGIN_MODE 2
+#define DEPTH_TO_BASETYPE(depth) (depth == 3 ? RGB : U16_RGB)
+#define DEPTH_TO_IMAGETYPE(depth) (depth == 3 ? RGB_IMAGE : U16_RGB_IMAGE)
+#else /* GIMP */
+#if HAVE_GIMP_2_9
+#include <gegl.h>
+#define PLUGIN_MODE 2
#else
+#define PLUGIN_MODE 1
+#endif
+#include <libgimpbase/gimpbase.h>
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
#define GIMP_CONST const
/* Missing and irrelevant definitions in GIMP */
#define U16_RGB 0
#define U16_RGB_IMAGE 0
-#define PLUGIN_MODE 1
+#define DEPTH_TO_BASETYPE(depth) GIMP_RGB
+#define DEPTH_TO_IMAGETYPE(depth) GIMP_RGB_IMAGE
+#define DEPTH_TO_PRECISION(depth) (depth == 3 ? GIMP_PRECISION_U8 :
GIMP_PRECISION_U16)
#endif
#include <glib/gi18n.h>
#include <string.h>
@@ -153,6 +164,9 @@
gdk_threads_enter();
ufraw_binary = g_path_get_basename(gimp_get_progname());
uf_init_locale(gimp_get_progname());
+#if HAVE_GIMP_2_9
+ gegl_init(NULL, NULL);
+#endif
*nreturn_vals = 1;
*return_vals = values;
@@ -238,7 +252,7 @@
ufraw_config(uf, &rc, NULL, NULL);
sendToGimpMode = (uf->conf->createID == send_id);
-#ifndef UFRAW_CINEPAINT
+#if !defined(UFRAW_CINEPAINT) && !HAVE_GIMP_2_9
if (loadThumbnail) {
uf->conf->size = size;
uf->conf->embeddedImage = TRUE;
@@ -314,18 +328,29 @@
(void)grayscale;
(void)bitDepth;
+#if HAVE_GIMP_2_9
+ gegl_buffer_set(out, GEGL_RECTANGLE(0, row, width, height),
+ 0, NULL, pixbuf,
+ GEGL_AUTO_ROWSTRIDE);
+#else
gimp_pixel_rgn_set_rect(out, pixbuf, 0, row, width, height);
+#endif
return UFRAW_SUCCESS;
}
long ufraw_save_gimp_image(ufraw_data *uf, GtkWidget *widget)
{
+#if HAVE_GIMP_2_9
+ GeglBuffer *buffer;
+#else
GimpDrawable *drawable;
GimpPixelRgn pixel_region;
+ int tile_height, row, nrows;
+#endif
gint32 layer;
UFRectangle Crop;
- int depth, tile_height, row, nrows;
+ int depth;
(void)widget;
uf->gimpImage = -1;
@@ -342,7 +367,7 @@
if (ufraw_convert_image(uf) != UFRAW_SUCCESS)
return UFRAW_ERROR;
ufraw_get_scaled_crop(uf, &Crop);
-#ifdef UFRAW_CINEPAINT
+#if defined(UFRAW_CINEPAINT) || HAVE_GIMP_2_9
if (uf->conf->profile[out_profile]
[uf->conf->profileIndex[out_profile]].BitDepth == 16)
depth = 6;
@@ -352,8 +377,15 @@
depth = 3;
#endif
}
+#if HAVE_GIMP_2_9
+ uf->gimpImage =
+ gimp_image_new_with_precision(Crop.width, Crop.height,
+ DEPTH_TO_BASETYPE(depth),
+ DEPTH_TO_PRECISION(depth));
+#else
uf->gimpImage = gimp_image_new(Crop.width, Crop.height,
- depth == 3 ? GIMP_RGB : U16_RGB);
+ DEPTH_TO_BASETYPE(depth));
+#endif
if (uf->gimpImage == -1) {
ufraw_message(UFRAW_ERROR, _("Can't allocate new image."));
return UFRAW_ERROR;
@@ -362,7 +394,7 @@
/* Create the "background" layer to hold the image... */
layer = gimp_layer_new(uf->gimpImage, _("Background"), Crop.width,
- Crop.height, depth == 3 ? GIMP_RGB_IMAGE :
U16_RGB_IMAGE,
+ Crop.height, DEPTH_TO_IMAGETYPE(depth),
100.0, GIMP_NORMAL_MODE);
#ifdef UFRAW_CINEPAINT
gimp_image_add_layer(uf->gimpImage, layer, 0);
@@ -375,23 +407,43 @@
#endif
/* Get the drawable and set the pixel region for our load... */
+#if HAVE_GIMP_2_9
+ buffer = gimp_drawable_get_buffer(layer);
+#else
drawable = gimp_drawable_get(layer);
gimp_pixel_rgn_init(&pixel_region, drawable, 0, 0, drawable->width,
drawable->height, TRUE, FALSE);
tile_height = gimp_tile_height();
+#endif
if (uf->conf->embeddedImage) {
+#if HAVE_GIMP_2_9
+ gegl_buffer_set(buffer,
+ GEGL_RECTANGLE(0, 0, Crop.width, Crop.height),
+ 0, NULL, uf->thumb.buffer,
+ GEGL_AUTO_ROWSTRIDE);
+#else
for (row = 0; row < Crop.height; row += tile_height) {
nrows = MIN(Crop.height - row, tile_height);
gimp_pixel_rgn_set_rect(&pixel_region,
uf->thumb.buffer + 3 * row * Crop.width,
0, row, Crop.width, nrows);
}
+#endif
} else {
+#if HAVE_GIMP_2_9
+ ufraw_write_image_data(uf, buffer, &Crop, depth == 3 ? 8 : 16, 0,
+ gimp_row_writer);
+#else
ufraw_write_image_data(uf, &pixel_region, &Crop, depth == 3 ? 8 : 16,
0,
gimp_row_writer);
+#endif
}
+#if HAVE_GIMP_2_9
+ gegl_buffer_flush(buffer);
+#else
gimp_drawable_flush(drawable);
gimp_drawable_detach(drawable);
+#endif
if (uf->conf->embeddedImage) return UFRAW_SUCCESS;
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
ufraw-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs