diff --git a/libgimp/gimpdrawable.c b/libgimp/gimpdrawable.c index 01e97f5c35..ee266afa5f 100644 --- a/libgimp/gimpdrawable.c +++ b/libgimp/gimpdrawable.c @@ -499,6 +499,8 @@ gimp_drawable_merge_filter (GimpDrawable *drawable, * @drawable: The #GimpDrawable. * @operation_name: The GEGL operation's name. * @name: The effect name. + * @mode: The blend mode. + * @opacity: The opacity from 0.0 (transparent) to 1.0 (opaque). * @...: a %NULL-terminated list of operation argument names * and values. * @@ -513,6 +515,7 @@ gimp_drawable_merge_filter (GimpDrawable *drawable, * * ```C * filter = gimp_drawable_append_new_filter (drawable, + * GIMP_LAYER_MODE_REPLACE, 1.0, * "gegl:gaussian-blur", "My Gaussian Blur", * "std-dev-x", 2.5, * "std-dev-y", 2.5, @@ -523,9 +526,11 @@ gimp_drawable_merge_filter (GimpDrawable *drawable, * Returns: (transfer none): The newly created filter. */ GimpDrawableFilter * -gimp_drawable_append_new_filter (GimpDrawable *drawable, - const gchar *operation_name, - const gchar *name, +gimp_drawable_append_new_filter (GimpDrawable *drawable, + const gchar *operation_name, + const gchar *name, + GimpLayerMode mode, + gdouble opacity, ...) { GimpDrawableFilter *filter; @@ -533,13 +538,16 @@ gimp_drawable_append_new_filter (GimpDrawable *drawable, const gchar *arg_name; va_list va_args; + g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), NULL); + g_return_val_if_fail (opacity >= 0.0 && opacity <= 1.0, NULL); + filter = gimp_drawable_filter_new (drawable, operation_name, name); g_return_val_if_fail (filter != NULL, NULL); config = gimp_drawable_filter_get_config (filter); - va_start (va_args, name); + va_start (va_args, opacity); while ((arg_name = va_arg (va_args, const gchar *))) { GParamSpec *pspec; @@ -570,6 +578,8 @@ gimp_drawable_append_new_filter (GimpDrawable *drawable, } va_end (va_args); + gimp_drawable_filter_set_blend_mode (filter, mode); + gimp_drawable_filter_set_opacity (filter, opacity); gimp_drawable_append_filter (drawable, filter); return filter; @@ -617,6 +627,7 @@ gimp_drawable_merge_new_filter (GimpDrawable *drawable, const gchar *arg_name; va_list va_args; + g_return_if_fail (GIMP_IS_DRAWABLE (drawable)); g_return_if_fail (opacity >= 0.0 && opacity <= 1.0); filter = gimp_drawable_filter_new (drawable, operation_name, name); diff --git a/libgimp/gimpdrawable.h b/libgimp/gimpdrawable.h index 22d7f96606..cc42c7675e 100644 --- a/libgimp/gimpdrawable.h +++ b/libgimp/gimpdrawable.h @@ -101,6 +101,8 @@ void gimp_drawable_merge_filter (GimpDrawable GimpDrawableFilter * gimp_drawable_append_new_filter (GimpDrawable *drawable, const gchar *operation_name, const gchar *name, + GimpLayerMode mode, + gdouble opacity, ...) G_GNUC_NULL_TERMINATED; void gimp_drawable_merge_new_filter (GimpDrawable *drawable, const gchar *operation_name, diff --git a/plug-ins/file-psd/psd-load.c b/plug-ins/file-psd/psd-load.c index d33ba0a5b7..b964545935 100644 --- a/plug-ins/file-psd/psd-load.c +++ b/plug-ins/file-psd/psd-load.c @@ -2775,11 +2775,10 @@ add_legacy_layer_effects (GimpLayer *layer, filter = gimp_drawable_append_new_filter (GIMP_DRAWABLE (layer), "gegl:color-overlay", NULL, + mode, + sofi.opacity / 255.0, "value", color, NULL); - gimp_drawable_filter_set_opacity (filter, sofi.opacity / 255.0); - gimp_drawable_filter_set_blend_mode (filter, mode); - gimp_drawable_filter_update (filter); g_object_unref (filter); g_object_unref (color);