[gimp/metadata-browser] app: port GimpCanvasTransformPreview to gegl_buffer_sample()



commit bfd75a95574d19e5f094454acaf00018c6725d0b
Author: Michael Natterer <mitch gimp org>
Date:   Sun Apr 22 21:37:25 2012 +0200

    app: port GimpCanvasTransformPreview to gegl_buffer_sample()

 app/display/gimpcanvastransformpreview.c |  387 +++++-------------------------
 1 files changed, 64 insertions(+), 323 deletions(-)
---
diff --git a/app/display/gimpcanvastransformpreview.c b/app/display/gimpcanvastransformpreview.c
index ebb99fa..0698dd5 100644
--- a/app/display/gimpcanvastransformpreview.c
+++ b/app/display/gimpcanvastransformpreview.c
@@ -30,8 +30,6 @@
 
 #include "display/display-types.h"
 
-#include "base/tile-manager.h"
-
 #include "core/gimpchannel.h"
 #include "core/gimpimage.h"
 #include "core/gimp-transform-utils.h"
@@ -871,14 +869,12 @@ gimp_canvas_transform_preview_draw_tri_row (GimpDrawable    *texture,
                                             gint             y,
                                             guchar           opacity)
 {
-  TileManager  *tiles;     /* used to get the source texture colors   */
-  guchar       *pptr;      /* points into the pixels of a row of area */
-  gfloat        u, v;
-  gfloat        du, dv;
-  gint          dx;
-  guchar        pixel[4];
-  const guchar *cmap;
-  gint          offset;
+  GeglBuffer *buffer;
+  const Babl *format;
+  guchar     *pptr;      /* points into the pixels of a row of area */
+  gfloat      u, v;
+  gfloat      du, dv;
+  gint        dx;
 
   if (x2 == x1)
     return;
@@ -933,142 +929,31 @@ gimp_canvas_transform_preview_draw_tri_row (GimpDrawable    *texture,
           + (y - area_offy) * cairo_image_surface_get_stride (area)
           + (x1 - area_offx) * 4);
 
-  tiles = gimp_drawable_get_tiles (texture);
+  buffer = gimp_drawable_get_buffer (texture);
+  format = babl_format ("R'G'B'A u8");
 
-  switch (gimp_drawable_type (texture))
+  while (dx--)
     {
-    case GIMP_INDEXED_IMAGE:
-      cmap = gimp_drawable_get_colormap (texture);
-
-      while (dx--)
-        {
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
-
-          offset = pixel[0] + pixel[0] + pixel[0];
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       cmap[offset + 0],
-                                       cmap[offset + 1],
-                                       cmap[offset + 2],
-                                       opacity);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-        }
-      break;
-
-    case GIMP_INDEXEDA_IMAGE:
-      cmap = gimp_drawable_get_colormap (texture);
-
-      while (dx--)
-        {
-          register gulong tmp;
-          guchar          alpha;
-
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
+      guchar          pixel[4];
+      register gulong tmp;
+      guchar          alpha;
 
-          offset = pixel[0] + pixel[0] + pixel[0];
-          alpha  = INT_MULT (opacity, pixel[1], tmp);
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       cmap[offset + 0],
-                                       cmap[offset + 1],
-                                       cmap[offset + 2],
-                                       alpha);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-        }
-      break;
-
-    case GIMP_GRAY_IMAGE:
-      while (dx--)
-        {
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       pixel[0],
-                                       pixel[0],
-                                       pixel[0],
-                                       opacity);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-        }
-      break;
-
-    case GIMP_GRAYA_IMAGE:
-      while (dx--)
-        {
-          register gulong tmp;
-          guchar          alpha;
+      gegl_buffer_sample (buffer, (gint) u, (gint) v, NULL, pixel,
+                          format,
+                          GEGL_SAMPLER_NEAREST, GEGL_ABYSS_NONE);
 
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
+      alpha = INT_MULT (opacity, pixel[3], tmp);
 
-          alpha = INT_MULT (opacity, pixel[1], tmp);
+      GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
+                                   pixel[0],
+                                   pixel[1],
+                                   pixel[2],
+                                   alpha);
 
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       pixel[0],
-                                       pixel[0],
-                                       pixel[0],
-                                       alpha);
+      pptr += 4;
 
-          pptr += 4;
-
-          u += du;
-          v += dv;
-        }
-      break;
-
-    case GIMP_RGB_IMAGE:
-      while (dx--)
-        {
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       pixel[0],
-                                       pixel[1],
-                                       pixel[2],
-                                       opacity);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-        }
-      break;
-
-    case GIMP_RGBA_IMAGE:
-      while (dx--)
-        {
-          register gulong tmp;
-          guchar          alpha;
-
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
-
-          alpha = INT_MULT (opacity, pixel[3], tmp);
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       pixel[0],
-                                       pixel[1],
-                                       pixel[2],
-                                       alpha);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-        }
-      break;
-
-    default:
-      return;
+      u += du;
+      v += dv;
     }
 
   cairo_surface_mark_dirty (area);
@@ -1102,17 +987,15 @@ gimp_canvas_transform_preview_draw_tri_row_mask (GimpDrawable    *texture,
                                                  gint             y,
                                                  guchar           opacity)
 {
-
-  TileManager  *tiles, *masktiles; /* used to get the source texture colors */
-  guchar       *pptr;              /* points into the pixels of area        */
-  gfloat        u, v;
-  gfloat        mu, mv;
-  gfloat        du, dv;
-  gint          dx;
-  guchar        pixel[4];
-  guchar        maskval;
-  const guchar *cmap;
-  gint          offset;
+  GeglBuffer *buffer;
+  const Babl *format;
+  GeglBuffer *mask_buffer;
+  const Babl *mask_format;
+  guchar     *pptr;              /* points into the pixels of area        */
+  gfloat      u, v;
+  gfloat      mu, mv;
+  gfloat      du, dv;
+  gint        dx;
 
   if (x2 == x1)
     return;
@@ -1171,181 +1054,39 @@ gimp_canvas_transform_preview_draw_tri_row_mask (GimpDrawable    *texture,
           + (y - area_offy) * cairo_image_surface_get_stride (area)
           + (x1 - area_offx) * 4);
 
-  tiles     = gimp_drawable_get_tiles (texture);
-  masktiles = gimp_drawable_get_tiles (GIMP_DRAWABLE (mask));
+  buffer      = gimp_drawable_get_buffer (texture);
+  mask_buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (mask));
+  format      = babl_format ("R'G'B'A u8");
+  mask_format = babl_format ("Y u8");
 
-  switch (gimp_drawable_type (texture))
+  while (dx--)
     {
-    case GIMP_INDEXED_IMAGE:
-      cmap = gimp_drawable_get_colormap (texture);
-
-      while (dx--)
-        {
-          register gulong tmp;
-          guchar          alpha;
-
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
-          tile_manager_read_pixel_data_1 (masktiles, (gint) mu, (gint) mv,
-                                          &maskval);
-
-          offset = pixel[0] + pixel[0] + pixel[0];
-          alpha  = INT_MULT (opacity, maskval, tmp);
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       cmap[offset + 0],
-                                       cmap[offset + 1],
-                                       cmap[offset + 2],
-                                       alpha);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-          mu += du;
-          mv += dv;
-        }
-      break;
-
-    case GIMP_INDEXEDA_IMAGE:
-      cmap = gimp_drawable_get_colormap (texture);
-
-      while (dx--)
-        {
-          register gulong tmp;
-          guchar          alpha;
-
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
-          tile_manager_read_pixel_data_1 (masktiles, (gint) mu, (gint) mv,
-                                          &maskval);
-
-          offset = pixel[0] + pixel[0] + pixel[0];
-          alpha  = INT_MULT3 (opacity, maskval, pixel[1], tmp);
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       cmap[offset + 0],
-                                       cmap[offset + 1],
-                                       cmap[offset + 2],
-                                       alpha);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-          mu += du;
-          mv += dv;
-        }
-      break;
-
-    case GIMP_GRAY_IMAGE:
-      while (dx--)
-        {
-          register gulong tmp;
-          guchar          alpha;
-
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
-          tile_manager_read_pixel_data_1 (masktiles, (gint) mu, (gint) mv,
-                                          &maskval);
-
-          alpha = INT_MULT (opacity, maskval, tmp);
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       pixel[0],
-                                       pixel[0],
-                                       pixel[0],
-                                       alpha);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-          mu += du;
-          mv += dv;
-        }
-      break;
-
-    case GIMP_GRAYA_IMAGE:
-      while (dx--)
-        {
-          register gulong tmp;
-          guchar          alpha;
-
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
-          tile_manager_read_pixel_data_1 (masktiles, (gint) mu, (gint) mv,
-                                          &maskval);
-
-          alpha = INT_MULT3 (opacity, maskval, pixel[1], tmp);
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       pixel[0],
-                                       pixel[0],
-                                       pixel[0],
-                                       alpha);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-          mu += du;
-          mv += dv;
-        }
-      break;
-
-    case GIMP_RGB_IMAGE:
-      while (dx--)
-        {
-          register gulong tmp;
-          guchar          alpha;
-
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
-          tile_manager_read_pixel_data_1 (masktiles, (gint) mu, (gint) mv,
-                                          &maskval);
-
-          alpha = INT_MULT (opacity, maskval, tmp);
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       pixel[0],
-                                       pixel[1],
-                                       pixel[2],
-                                       alpha);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-          mu += du;
-          mv += dv;
-        }
-      break;
-
-    case GIMP_RGBA_IMAGE:
-      while (dx--)
-        {
-          register gulong tmp;
-          guchar          alpha;
-
-          tile_manager_read_pixel_data_1 (tiles, (gint) u, (gint) v, pixel);
-          tile_manager_read_pixel_data_1 (masktiles, (gint) mu, (gint) mv,
-                                          &maskval);
-
-          alpha = INT_MULT3 (opacity, maskval, pixel[3], tmp);
-
-          GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
-                                       pixel[0],
-                                       pixel[1],
-                                       pixel[2],
-                                       alpha);
-
-          pptr += 4;
-
-          u += du;
-          v += dv;
-          mu += du;
-          mv += dv;
-        }
-      break;
-
-    default:
-      return;
+      guchar          pixel[4];
+      guchar          maskval;
+      register gulong tmp;
+      guchar          alpha;
+
+      gegl_buffer_sample (buffer, (gint) u, (gint) v, NULL, pixel,
+                          format,
+                          GEGL_SAMPLER_NEAREST, GEGL_ABYSS_NONE);
+      gegl_buffer_sample (mask_buffer, (gint) mu, (gint) mv, NULL, &maskval,
+                          mask_format,
+                          GEGL_SAMPLER_NEAREST, GEGL_ABYSS_NONE);
+
+      alpha = INT_MULT3 (opacity, maskval, pixel[3], tmp);
+
+      GIMP_CAIRO_ARGB32_SET_PIXEL (pptr,
+                                   pixel[0],
+                                   pixel[1],
+                                   pixel[2],
+                                   alpha);
+
+      pptr += 4;
+
+      u += du;
+      v += dv;
+      mu += du;
+      mv += dv;
     }
 
   cairo_surface_mark_dirty (area);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]