From c19f6509ead5a0830b780129075dcc05e431ca52 Mon Sep 17 00:00:00 2001 From: Alx Sa Date: Wed, 16 Oct 2024 13:32:56 +0000 Subject: [PATCH 1/2] core: Update XCF version even if layer effects are inactive Similar to afc0a6d1, we need to use gimp_drawable_get_filters () to get the total number of filters rather than gimp_drawable_has_filters (), which just returns if any filters in the stack are active/visible. Because of this, we weren't updating the XCF version to 22 when we saved a file that had all of its layer effects set to invisible/inactive. --- app/core/gimpimage.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c index 56ff32f7032..52957b21a28 100644 --- a/app/core/gimpimage.c +++ b/app/core/gimpimage.c @@ -2783,7 +2783,8 @@ gimp_image_get_xcf_version (GimpImage *image, items = gimp_image_get_layer_list (image); for (list = items; list; list = g_list_next (list)) { - GimpLayer *layer = GIMP_LAYER (list->data); + GimpLayer *layer = GIMP_LAYER (list->data); + GimpContainer *filters; switch (gimp_layer_get_mode (layer)) { @@ -2934,7 +2935,8 @@ gimp_image_get_xcf_version (GimpImage *image, version = MAX (19, version); } - if (gimp_drawable_has_filters (GIMP_DRAWABLE (layer))) + filters = gimp_drawable_get_filters (GIMP_DRAWABLE (layer)); + if (gimp_container_get_n_children (filters) > 0) { ADD_REASON (g_strdup_printf (_("Layer effects were added in %s"), "GIMP 3.0")); -- GitLab From af8cc019e30757c27f306bfc7a75fc5cba228c01 Mon Sep 17 00:00:00 2001 From: Alx Sa Date: Wed, 16 Oct 2024 14:17:55 +0000 Subject: [PATCH 2/2] core: Rename gimp_drawable_has_filters ()... ...to gimp_drawable_has_visible_filters (). With NDE filters, it's now possible to have filters that are not active but still attached to a layer. This patch renames the API to prevent confusion as seen in prior commits. --- app/core/gimpdrawable-filters.c | 2 +- app/core/gimpdrawable-filters.h | 36 +++++++++++++++---------------- app/core/gimpdrawable-histogram.c | 2 +- app/core/gimpdrawable.c | 4 ++-- app/core/gimpgrouplayer.c | 2 +- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/app/core/gimpdrawable-filters.c b/app/core/gimpdrawable-filters.c index 53024b0eb5a..d3e766d30ab 100644 --- a/app/core/gimpdrawable-filters.c +++ b/app/core/gimpdrawable-filters.c @@ -58,7 +58,7 @@ gimp_drawable_get_filters (GimpDrawable *drawable) } gboolean -gimp_drawable_has_filters (GimpDrawable *drawable) +gimp_drawable_has_visible_filters (GimpDrawable *drawable) { GList *list; diff --git a/app/core/gimpdrawable-filters.h b/app/core/gimpdrawable-filters.h index 5857bf918c5..ebbb7b65980 100644 --- a/app/core/gimpdrawable-filters.h +++ b/app/core/gimpdrawable-filters.h @@ -21,29 +21,29 @@ #define __GIMP_DRAWABLE_FILTERS_H__ -GimpContainer * gimp_drawable_get_filters (GimpDrawable *drawable); +GimpContainer * gimp_drawable_get_filters (GimpDrawable *drawable); -gboolean gimp_drawable_has_filters (GimpDrawable *drawable); +gboolean gimp_drawable_has_visible_filters (GimpDrawable *drawable); -void gimp_drawable_add_filter (GimpDrawable *drawable, - GimpFilter *filter); -void gimp_drawable_remove_filter (GimpDrawable *drawable, - GimpFilter *filter); -void gimp_drawable_clear_filters (GimpDrawable *drawable); +void gimp_drawable_add_filter (GimpDrawable *drawable, + GimpFilter *filter); +void gimp_drawable_remove_filter (GimpDrawable *drawable, + GimpFilter *filter); +void gimp_drawable_clear_filters (GimpDrawable *drawable); -void gimp_drawable_merge_filters (GimpDrawable *drawable); +void gimp_drawable_merge_filters (GimpDrawable *drawable); -gboolean gimp_drawable_has_filter (GimpDrawable *drawable, - GimpFilter *filter); +gboolean gimp_drawable_has_filter (GimpDrawable *drawable, + GimpFilter *filter); -gboolean gimp_drawable_merge_filter (GimpDrawable *drawable, - GimpFilter *filter, - GimpProgress *progress, - const gchar *undo_desc, - const Babl *format, - gboolean clip, - gboolean cancellable, - gboolean update); +gboolean gimp_drawable_merge_filter (GimpDrawable *drawable, + GimpFilter *filter, + GimpProgress *progress, + const gchar *undo_desc, + const Babl *format, + gboolean clip, + gboolean cancellable, + gboolean update); #endif /* __GIMP_DRAWABLE_FILTERS_H__ */ diff --git a/app/core/gimpdrawable-histogram.c b/app/core/gimpdrawable-histogram.c index 9c741203340..62b755cf7fa 100644 --- a/app/core/gimpdrawable-histogram.c +++ b/app/core/gimpdrawable-histogram.c @@ -122,7 +122,7 @@ gimp_drawable_calculate_histogram_internal (GimpDrawable *drawable, GeglBuffer *buffer = gimp_drawable_get_buffer (drawable); GimpProjectable *projectable = NULL; - if (with_filters && gimp_drawable_has_filters (drawable)) + if (with_filters && gimp_drawable_has_visible_filters (drawable)) { GimpTileHandlerValidate *validate; GeglNode *node; diff --git a/app/core/gimpdrawable.c b/app/core/gimpdrawable.c index 1dbf387b97f..f38a4ddc073 100644 --- a/app/core/gimpdrawable.c +++ b/app/core/gimpdrawable.c @@ -1548,7 +1548,7 @@ gimp_drawable_get_buffer_with_effects (GimpDrawable *drawable) if (drawable->private->paint_count == 0) { - if (gimp_drawable_has_filters (drawable)) + if (gimp_drawable_has_visible_filters (drawable)) { GeglNode *source = NULL; GeglBuffer *buffer; @@ -2076,7 +2076,7 @@ gimp_drawable_end_paint (GimpDrawable *drawable) drawable->private->paint_count--; /* Refresh filters after painting */ - if (gimp_drawable_has_filters (drawable) && + if (gimp_drawable_has_visible_filters (drawable) && drawable->private->paint_count == 0) { gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE); diff --git a/app/core/gimpgrouplayer.c b/app/core/gimpgrouplayer.c index 71d194369a9..ce2ef0e6f5b 100644 --- a/app/core/gimpgrouplayer.c +++ b/app/core/gimpgrouplayer.c @@ -2359,7 +2359,7 @@ gimp_group_layer_proj_update (GimpProjection *proj, * negatively impacts the performance of the warp tool, which does perform * accurate drawable updates while using a filter. */ - if (gimp_drawable_has_filters (GIMP_DRAWABLE (group))) + if (gimp_drawable_has_visible_filters (GIMP_DRAWABLE (group))) { width = -1; height = -1; -- GitLab