Commit 169221bc authored by Michael Natterer's avatar Michael Natterer 😴

app: replace some color_region() and pattern_region() by GEGL code

parent 1ff7ecb4
......@@ -544,6 +544,7 @@ gimp_edit_fill_internal (GimpImage *image,
const gchar *undo_desc)
{
TileManager *buf_tiles;
GeglBuffer *dest_buffer;
PixelRegion bufPR;
gint x, y, width, height;
GimpImageType drawable_type;
......@@ -597,23 +598,46 @@ gimp_edit_fill_internal (GimpImage *image,
buf_tiles = tile_manager_new (width, height, tiles_bytes);
pixel_region_init (&bufPR, buf_tiles, 0, 0, width, height, TRUE);
dest_buffer = gimp_tile_manager_create_buffer (buf_tiles, TRUE);
if (pat_buf)
{
pattern_region (&bufPR, NULL, pat_buf, 0, 0);
GeglBuffer *src_buffer;
GeglRectangle rect = { 0, };
rect.width = pat_buf->width;
rect.height = pat_buf->height;
src_buffer = gegl_buffer_linear_new_from_data (temp_buf_get_data (pat_buf),
gimp_bpp_to_babl_format (tiles_bytes, TRUE),
&rect,
rect.width * pat_buf->bytes,
NULL, NULL);
gegl_buffer_set_pattern (dest_buffer, NULL, src_buffer, 0, 0);
g_object_unref (src_buffer);
if (new_buf)
temp_buf_free (pat_buf);
}
else
{
GeglColor *color;
if (gimp_drawable_has_alpha (drawable))
col[gimp_drawable_bytes (drawable) - 1] = OPAQUE_OPACITY;
color_region (&bufPR, col);
color = gegl_color_new (NULL);
gegl_color_set_pixel (color, gimp_drawable_get_babl_format (drawable), col);
gegl_buffer_set_color (dest_buffer, NULL, color);
g_object_unref (color);
}
g_object_unref (dest_buffer);
pixel_region_init (&bufPR, buf_tiles, 0, 0, width, height, FALSE);
gimp_drawable_apply_region (drawable, &bufPR,
TRUE, undo_desc,
......
......@@ -542,7 +542,7 @@ gimp_drawable_resize (GimpItem *item,
gint offset_y)
{
GimpDrawable *drawable = GIMP_DRAWABLE (item);
PixelRegion destPR;
GeglBuffer *dest_buffer;
TileManager *new_tiles;
gint new_offset_x;
gint new_offset_y;
......@@ -575,33 +575,35 @@ gimp_drawable_resize (GimpItem *item,
new_tiles = tile_manager_new (new_width, new_height,
gimp_drawable_bytes (drawable));
/* Determine whether the new tiles need to be initially cleared */
dest_buffer = gimp_tile_manager_create_buffer (new_tiles, TRUE);
if (copy_width != new_width ||
copy_height != new_height)
{
guchar bg[MAX_CHANNELS] = { 0, };
/* Clear the new tiles if needed */
pixel_region_init (&destPR, new_tiles,
0, 0,
new_width, new_height,
TRUE);
GeglColor *col;
guchar bg[MAX_CHANNELS] = { 0, };
if (! gimp_drawable_has_alpha (drawable) && ! GIMP_IS_CHANNEL (drawable))
gimp_image_get_background (gimp_item_get_image (item), context,
gimp_drawable_type (drawable), bg);
color_region (&destPR, bg);
col = gegl_color_new (NULL);
gegl_color_set_pixel (col, gimp_drawable_get_babl_format (drawable), bg);
gegl_buffer_set_color (dest_buffer, NULL, col);
g_object_unref (col);
}
/* Determine whether anything needs to be copied */
if (copy_width && copy_height)
{
GeglBuffer *dest_buffer;
/* Copy the pixels in the intersection */
GeglRectangle src_rect;
GeglRectangle dest_rect;
dest_buffer = gimp_tile_manager_create_buffer (new_tiles, TRUE);
src_rect.x = copy_x - gimp_item_get_offset_x (item);
src_rect.y = copy_y - gimp_item_get_offset_y (item);
src_rect.width = copy_width;
......@@ -613,9 +615,10 @@ gimp_drawable_resize (GimpItem *item,
gegl_buffer_copy (gimp_drawable_get_read_buffer (drawable), &src_rect,
dest_buffer, &dest_rect);
g_object_unref (dest_buffer);
}
g_object_unref (dest_buffer);
gimp_drawable_set_tiles_full (drawable, gimp_item_is_attached (item), NULL,
new_tiles, gimp_drawable_type (drawable),
new_offset_x, new_offset_y);
......@@ -1714,7 +1717,6 @@ gimp_drawable_fill (GimpDrawable *drawable,
GimpItem *item;
GimpImage *image;
GimpImageType drawable_type;
PixelRegion destPR;
g_return_if_fail (GIMP_IS_DRAWABLE (drawable));
g_return_if_fail (color != NULL || pattern != NULL);
......@@ -1725,39 +1727,50 @@ gimp_drawable_fill (GimpDrawable *drawable,
drawable_type = gimp_drawable_type (drawable);
pixel_region_init (&destPR, gimp_drawable_get_tiles (drawable),
0, 0, gimp_item_get_width (item), gimp_item_get_height (item),
TRUE);
if (color)
{
guchar tmp[MAX_CHANNELS];
guchar c[MAX_CHANNELS];
GeglColor *col;
guchar c[MAX_CHANNELS];
gimp_rgba_get_uchar (color,
&tmp[RED],
&tmp[GREEN],
&tmp[BLUE],
&tmp[ALPHA]);
gimp_image_transform_color (image, drawable_type, c, GIMP_RGB, tmp);
gimp_image_transform_rgb (image, drawable_type, color, c);
if (GIMP_IMAGE_TYPE_HAS_ALPHA (drawable_type))
c[GIMP_IMAGE_TYPE_BYTES (drawable_type) - 1] = tmp[ALPHA];
gimp_rgba_get_uchar (color, NULL, NULL, NULL,
c + GIMP_IMAGE_TYPE_BYTES (drawable_type) - 1);
else
c[GIMP_IMAGE_TYPE_BYTES (drawable_type)] = OPAQUE_OPACITY;
color_region (&destPR, c);
col = gegl_color_new (NULL);
gegl_color_set_pixel (col, gimp_drawable_get_babl_format (drawable), c);
gegl_buffer_set_color (gimp_drawable_get_write_buffer (drawable),
NULL, col);
g_object_unref (col);
}
else
{
TempBuf *pat_buf;
gboolean new_buf;
GeglBuffer *src_buffer;
GeglRectangle rect = { 0, };
TempBuf *pat_buf;
gboolean new_buf;
pat_buf = gimp_image_transform_temp_buf (image, drawable_type,
pattern->mask, &new_buf);
pattern_region (&destPR, NULL, pat_buf, 0, 0);
rect.width = pat_buf->width;
rect.height = pat_buf->height;
src_buffer = gegl_buffer_linear_new_from_data (temp_buf_get_data (pat_buf),
gimp_bpp_to_babl_format (pat_buf->bytes, TRUE),
&rect,
rect.width * pat_buf->bytes,
NULL, NULL);
gegl_buffer_set_pattern (gimp_drawable_get_write_buffer (drawable),
NULL, src_buffer, 0, 0);
g_object_unref (src_buffer);
if (new_buf)
temp_buf_free (pat_buf);
......
......@@ -521,8 +521,10 @@ gimp_image_merge_layers (GimpImage *image,
if (merge_type == GIMP_FLATTEN_IMAGE ||
gimp_drawable_type (GIMP_DRAWABLE (layer)) == GIMP_INDEXED_IMAGE)
{
GimpImageType type;
guchar bg[4] = { 0, 0, 0, 0 };
GeglColor *color;
GeglRectangle rect = { 0, };
GimpImageType type;
guchar bg[4] = { 0, 0, 0, 0 };
type = GIMP_IMAGE_TYPE_FROM_BASE_TYPE (gimp_image_base_type (image));
......@@ -543,14 +545,16 @@ gimp_image_merge_layers (GimpImage *image,
gimp_drawable_type (GIMP_DRAWABLE (merge_layer)),
bg);
/* init the pixel region */
pixel_region_init (&src1PR,
gimp_drawable_get_tiles (GIMP_DRAWABLE (merge_layer)),
0, 0, (x2 - x1), (y2 - y1),
TRUE);
rect.width = x2 - x1;
rect.height = y2 - y1;
color = gegl_color_new (NULL);
gegl_color_set_pixel (color, gimp_drawable_get_babl_format (GIMP_DRAWABLE (merge_layer)), bg);
gegl_buffer_set_color (gimp_drawable_get_write_buffer (GIMP_DRAWABLE (merge_layer)),
&rect, color);
/* set the region to the background color */
color_region (&src1PR, bg);
g_object_unref (color);
position = 0;
}
......
......@@ -390,7 +390,7 @@ gimp_template_editor_constructed (GObject *object)
combo = gimp_prop_enum_combo_box_new (G_OBJECT (template),
"fill-type",
GIMP_FOREGROUND_FILL,
GIMP_TRANSPARENT_FILL);
GIMP_PATTERN_FILL);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 3,
_("_Fill with:"), 0.0, 0.5,
combo, 1, FALSE);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment