app: fix merge visible layers when there are pass-through groups.

This commit is contained in:
Jehan 2025-10-22 23:58:56 +02:00
parent 833e5858a3
commit a5ac6eb9c1

View file

@ -746,6 +746,7 @@ gimp_image_merge_layers (GimpImage *image,
for (layers = trimmed_list; layers; layers = g_slist_next (layers))
{
gint off_x, off_y;
gint width, height;
layer = layers->data;
@ -753,7 +754,23 @@ gimp_image_merge_layers (GimpImage *image,
gimp_drawable_merge_filters (GIMP_DRAWABLE (layer));
gimp_drawable_clear_filters (GIMP_DRAWABLE (layer));
gimp_item_get_offset (GIMP_ITEM (layer), &off_x, &off_y);
if (gimp_layer_get_mode (layer) == GIMP_LAYER_MODE_PASS_THROUGH)
{
GeglNode *mode_node = gimp_drawable_get_mode_node (GIMP_DRAWABLE (layer));
GeglRectangle rect;
rect = gegl_node_get_bounding_box (mode_node);
off_x = rect.x;
off_y = rect.y;
width = rect.width;
height = rect.height;
}
else
{
gimp_item_get_offset (GIMP_ITEM (layer), &off_x, &off_y);
width = gimp_item_get_width (GIMP_ITEM (layer));
height = gimp_item_get_height (GIMP_ITEM (layer));
}
switch (merge_type)
{
@ -763,8 +780,8 @@ gimp_image_merge_layers (GimpImage *image,
{
x1 = off_x;
y1 = off_y;
x2 = off_x + gimp_item_get_width (GIMP_ITEM (layer));
y2 = off_y + gimp_item_get_height (GIMP_ITEM (layer));
x2 = off_x + width;
y2 = off_y + height;
}
else
{
@ -772,10 +789,10 @@ gimp_image_merge_layers (GimpImage *image,
x1 = off_x;
if (off_y < y1)
y1 = off_y;
if ((off_x + gimp_item_get_width (GIMP_ITEM (layer))) > x2)
x2 = (off_x + gimp_item_get_width (GIMP_ITEM (layer)));
if ((off_y + gimp_item_get_height (GIMP_ITEM (layer))) > y2)
y2 = (off_y + gimp_item_get_height (GIMP_ITEM (layer)));
if ((off_x + width) > x2)
x2 = (off_x + width);
if ((off_y + height) > y2)
y2 = (off_y + height);
}
if (merge_type == GIMP_CLIP_TO_IMAGE)
@ -792,8 +809,8 @@ gimp_image_merge_layers (GimpImage *image,
{
x1 = off_x;
y1 = off_y;
x2 = off_x + gimp_item_get_width (GIMP_ITEM (layer));
y2 = off_y + gimp_item_get_height (GIMP_ITEM (layer));
x2 = off_x + width;
y2 = off_y + height;
}
break;