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

Reply via email to