app: fix merge visible layers when there are pass-through groups.
This commit is contained in:
parent
833e5858a3
commit
a5ac6eb9c1
1 changed files with 26 additions and 9 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue