mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-03 09:23:24 +00:00
core: Add alpha on merge if filter requires it
Some filters such as Color to Alpha require an alpha channel. Now that we have NDE, filters can exist separately from layers until they're merged down. This means the layer itself may not have an alpha channel, causing distortions on merge. This patch adds a method to check if the filter requires an alpha channel, and adds it to the layer on merge or export if it has such a filter.
This commit is contained in:
parent
50df422969
commit
c2b9c21b5b
3 changed files with 22 additions and 2 deletions
|
@ -300,6 +300,7 @@ gimp_drawable_merge_filters (GimpDrawable *drawable)
|
|||
if (GIMP_LIST (drawable->private->filter_stack)->queue->head)
|
||||
{
|
||||
GimpDrawableFilter *filter = NULL;
|
||||
gboolean add_alpha = FALSE;
|
||||
|
||||
for (list = GIMP_LIST (drawable->private->filter_stack)->queue->tail;
|
||||
list;
|
||||
|
@ -307,7 +308,12 @@ gimp_drawable_merge_filters (GimpDrawable *drawable)
|
|||
{
|
||||
if (GIMP_IS_DRAWABLE_FILTER (list->data) &&
|
||||
gimp_filter_get_active (GIMP_FILTER (list->data)))
|
||||
{
|
||||
filter = list->data;
|
||||
|
||||
if (! add_alpha)
|
||||
add_alpha = gimp_drawable_filter_get_add_alpha (filter);
|
||||
}
|
||||
}
|
||||
|
||||
if (filter)
|
||||
|
@ -317,6 +323,9 @@ gimp_drawable_merge_filters (GimpDrawable *drawable)
|
|||
GeglNode *output;
|
||||
GeglRectangle output_rect;
|
||||
|
||||
if (GIMP_IS_LAYER (drawable) && add_alpha)
|
||||
gimp_layer_add_alpha (GIMP_LAYER (drawable));
|
||||
|
||||
graph = gimp_filter_stack_get_graph (GIMP_FILTER_STACK (drawable->private->filter_stack));
|
||||
output = gegl_node_get_output_proxy (graph, "output");
|
||||
output_rect = gegl_node_get_bounding_box (output);
|
||||
|
|
|
@ -530,6 +530,8 @@ gimp_drawable_filter_duplicate (GimpDrawable *drawable,
|
|||
prior_filter->composite_mode);
|
||||
gimp_drawable_filter_set_region (filter,
|
||||
prior_filter->region);
|
||||
gimp_drawable_filter_set_add_alpha (filter,
|
||||
prior_filter->add_alpha);
|
||||
gimp_filter_set_active (GIMP_FILTER (filter),
|
||||
gimp_filter_get_active (GIMP_FILTER (prior_filter)));
|
||||
gimp_filter_set_is_last_node (GIMP_FILTER (filter),
|
||||
|
@ -1127,6 +1129,14 @@ gimp_drawable_filter_update (GimpDrawableFilter *filter,
|
|||
return (*error != NULL);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_drawable_filter_get_add_alpha (GimpDrawableFilter *filter)
|
||||
{
|
||||
g_return_val_if_fail (GIMP_IS_DRAWABLE_FILTER (filter), FALSE);
|
||||
|
||||
return filter->add_alpha;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_drawable_filter_set_add_alpha (GimpDrawableFilter *filter,
|
||||
gboolean add_alpha)
|
||||
|
|
|
@ -126,6 +126,7 @@ gboolean gimp_drawable_filter_update (GimpDrawableFilter *filter,
|
|||
const gchar **auxinputnames,
|
||||
const GimpDrawable **auxinputs,
|
||||
GError **error);
|
||||
gboolean gimp_drawable_filter_get_add_alpha (GimpDrawableFilter *filter);
|
||||
void gimp_drawable_filter_set_add_alpha (GimpDrawableFilter *filter,
|
||||
gboolean add_alpha);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue