mirror of https://github.com/GNOME/gimp.git
core: Include NDE filters when opening as layers
Adds code to copy any NDE filters when importing an .xcf file as layers in an existing project. This also requires removing the check for the layer being attached to an image, which historically made sense because filter effects were immediately merged down. Now that filters can exist separately the check is no longer required.
This commit is contained in:
parent
ebeef5d7ef
commit
fcdddad2a7
|
@ -279,11 +279,6 @@ gimp_drawable_filter_new (GimpDrawable *drawable,
|
|||
GeglNode *node;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), NULL);
|
||||
/* When copying a layer group whose children have layer effects,
|
||||
* the child may be attached to the layer group but not the
|
||||
* image itself at that point. */
|
||||
g_return_val_if_fail (gimp_item_is_attached (GIMP_ITEM (drawable)) ||
|
||||
gimp_viewable_get_parent (GIMP_VIEWABLE (drawable)), NULL);
|
||||
g_return_val_if_fail (GEGL_IS_NODE (operation), NULL);
|
||||
g_return_val_if_fail (gegl_node_has_pad (operation, "output"), NULL);
|
||||
|
||||
|
@ -780,8 +775,6 @@ gimp_drawable_filter_apply (GimpDrawableFilter *filter,
|
|||
const GeglRectangle *area)
|
||||
{
|
||||
g_return_if_fail (GIMP_IS_DRAWABLE_FILTER (filter));
|
||||
g_return_if_fail (gimp_item_is_attached (GIMP_ITEM (filter->drawable)) ||
|
||||
gimp_viewable_get_parent (GIMP_VIEWABLE (filter->drawable)));
|
||||
|
||||
gimp_drawable_filter_add_filter (filter);
|
||||
|
||||
|
@ -804,9 +797,6 @@ gimp_drawable_filter_commit (GimpDrawableFilter *filter,
|
|||
gboolean success = TRUE;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_DRAWABLE_FILTER (filter), FALSE);
|
||||
g_return_val_if_fail (gimp_item_is_attached (GIMP_ITEM (filter->drawable)) ||
|
||||
gimp_viewable_get_parent (GIMP_VIEWABLE (filter->drawable)),
|
||||
FALSE);
|
||||
g_return_val_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress), FALSE);
|
||||
|
||||
if (gimp_drawable_filter_is_added (filter))
|
||||
|
|
|
@ -2716,9 +2716,6 @@ gimp_item_mask_intersect (GimpItem *item,
|
|||
gboolean retval;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_ITEM (item), FALSE);
|
||||
g_return_val_if_fail (gimp_item_is_attached (item) ||
|
||||
gimp_viewable_get_parent (GIMP_VIEWABLE (item)),
|
||||
FALSE);
|
||||
|
||||
image = gimp_item_get_image (item);
|
||||
selection = gimp_image_get_mask (image);
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
#include "core/gimp.h"
|
||||
#include "core/gimpcontext.h"
|
||||
#include "core/gimpdocumentlist.h"
|
||||
#include "core/gimpdrawable-filters.h"
|
||||
#include "core/gimpdrawablefilter.h"
|
||||
#include "core/gimpimage.h"
|
||||
#include "core/gimpimage-merge.h"
|
||||
#include "core/gimpimage-undo.h"
|
||||
|
@ -781,6 +783,39 @@ file_open_convert_items (GimpImage *dest_image,
|
|||
|
||||
item = gimp_item_convert (src, dest_image, G_TYPE_FROM_INSTANCE (src));
|
||||
|
||||
/* Import any attached layer effects */
|
||||
if (GIMP_IS_DRAWABLE (item) &&
|
||||
gimp_drawable_has_filters (GIMP_DRAWABLE (src)))
|
||||
{
|
||||
GList *filter_list;
|
||||
GimpContainer *filters;
|
||||
|
||||
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (src));
|
||||
|
||||
for (filter_list = GIMP_LIST (filters)->queue->tail; filter_list;
|
||||
filter_list = g_list_previous (filter_list))
|
||||
{
|
||||
if (GIMP_IS_DRAWABLE_FILTER (filter_list->data))
|
||||
{
|
||||
GimpDrawableFilter *old_filter = filter_list->data;
|
||||
GimpDrawableFilter *filter;
|
||||
|
||||
filter =
|
||||
gimp_drawable_filter_duplicate (GIMP_DRAWABLE (item),
|
||||
old_filter);
|
||||
|
||||
if (filter != NULL)
|
||||
{
|
||||
gimp_drawable_filter_apply (filter, NULL);
|
||||
gimp_drawable_filter_commit (filter, TRUE, NULL, FALSE);
|
||||
|
||||
gimp_drawable_filter_layer_mask_freeze (filter);
|
||||
g_object_unref (filter);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (g_list_length (items) == 1)
|
||||
{
|
||||
gimp_object_set_name (GIMP_OBJECT (item), basename);
|
||||
|
|
Loading…
Reference in New Issue