[gimp/goat-invasion: 544/608] app: port GimpCanvasTransformPreview to gegl_buffer_sample()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/goat-invasion: 544/608] app: port GimpCanvasTransformPreview to gegl_buffer_sample()
- Date: Fri, 27 Apr 2012 21:11:06 +0000 (UTC)
commit 093de6c757958fc157ca5ab01c96a8123b97ee01
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]