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 ufraw-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ufraw-cvs