app: better GEGL code in gimp_layer_create_mask()

This commit is contained in:
Michael Natterer 2012-03-26 23:27:52 +02:00
parent f5e1dc5bf5
commit eea149d8e5
1 changed files with 21 additions and 36 deletions

View File

@ -29,12 +29,6 @@
#include "core-types.h" #include "core-types.h"
#include "base/pixel-region.h"
#include "base/tile-manager.h"
#include "base/tile.h"
#include "paint-funcs/paint-funcs.h"
#include "gegl/gimp-gegl-nodes.h" #include "gegl/gimp-gegl-nodes.h"
#include "gegl/gimp-gegl-utils.h" #include "gegl/gimp-gegl-utils.h"
@ -1300,17 +1294,14 @@ gimp_layer_create_mask (const GimpLayer *layer,
case GIMP_ADD_ALPHA_TRANSFER_MASK: case GIMP_ADD_ALPHA_TRANSFER_MASK:
if (gimp_drawable_has_alpha (drawable)) if (gimp_drawable_has_alpha (drawable))
{ {
TileManager *dest_tiles; GeglBuffer *dest_buffer;
GeglBuffer *dest_buffer;
dest_tiles = gimp_drawable_get_tiles (GIMP_DRAWABLE (mask)); dest_buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (mask));
dest_buffer = gimp_tile_manager_create_buffer (dest_tiles,
babl_format ("A u8"));
gegl_buffer_set_format (dest_buffer, babl_format ("A u8"));
gegl_buffer_copy (gimp_drawable_get_buffer (drawable), NULL, gegl_buffer_copy (gimp_drawable_get_buffer (drawable), NULL,
dest_buffer, NULL); dest_buffer, NULL);
gegl_buffer_set_format (dest_buffer, NULL);
g_object_unref (dest_buffer);
if (add_mask_type == GIMP_ADD_ALPHA_TRANSFER_MASK) if (add_mask_type == GIMP_ADD_ALPHA_TRANSFER_MASK)
{ {
@ -1377,9 +1368,11 @@ gimp_layer_create_mask (const GimpLayer *layer,
dest = gimp_drawable_get_buffer (GIMP_DRAWABLE (mask)); dest = gimp_drawable_get_buffer (GIMP_DRAWABLE (mask));
gegl_buffer_copy (src, gegl_buffer_copy (src,
GIMP_GEGL_RECT (copy_x, copy_y, copy_width, copy_height), GIMP_GEGL_RECT (copy_x, copy_y,
dest, copy_width, copy_height),
GIMP_GEGL_RECT (copy_x-offset_x, copy_y-offset_y, 0, 0)); dest,
GIMP_GEGL_RECT (copy_x - offset_x, copy_y - offset_y,
0, 0));
GIMP_CHANNEL (mask)->bounds_known = FALSE; GIMP_CHANNEL (mask)->bounds_known = FALSE;
} }
@ -1388,29 +1381,24 @@ gimp_layer_create_mask (const GimpLayer *layer,
case GIMP_ADD_COPY_MASK: case GIMP_ADD_COPY_MASK:
{ {
TileManager *copy_tiles = NULL; GeglBuffer *src_buffer;
GeglBuffer *src_buffer; GeglBuffer *dest_buffer;
GeglBuffer *dest_buffer;
if (! gimp_drawable_is_gray (drawable)) if (! gimp_drawable_is_gray (drawable))
{ {
GimpImageType copy_type; const Babl *copy_format =
gimp_image_get_format (image,
gimp_drawable_has_alpha (drawable) ?
GIMP_GRAYA_IMAGE : GIMP_GRAY_IMAGE);
copy_type = (gimp_drawable_has_alpha (drawable) ? src_buffer =
GIMP_GRAYA_IMAGE : GIMP_GRAY_IMAGE); gimp_gegl_buffer_new (GIMP_GEGL_RECT (0, 0,
gimp_item_get_width (item),
copy_tiles = tile_manager_new (gimp_item_get_width (item), gimp_item_get_height (item)),
gimp_item_get_height (item), copy_format);
GIMP_IMAGE_TYPE_BYTES (copy_type));
dest_buffer = gimp_tile_manager_create_buffer (copy_tiles, NULL);
gegl_buffer_copy (gimp_drawable_get_buffer (drawable), NULL, gegl_buffer_copy (gimp_drawable_get_buffer (drawable), NULL,
dest_buffer, NULL); src_buffer, NULL);
g_object_unref (dest_buffer);
src_buffer = gimp_tile_manager_create_buffer (copy_tiles, NULL);
} }
else else
{ {
@ -1440,9 +1428,6 @@ gimp_layer_create_mask (const GimpLayer *layer,
} }
g_object_unref (src_buffer); g_object_unref (src_buffer);
if (copy_tiles)
tile_manager_unref (copy_tiles);
} }
GIMP_CHANNEL (mask)->bounds_known = FALSE; GIMP_CHANNEL (mask)->bounds_known = FALSE;