diff --git a/app/core/gimp-layer-modes.c b/app/core/gimp-layer-modes.c index eb31aa9b0b..b513de6b73 100644 --- a/app/core/gimp-layer-modes.c +++ b/app/core/gimp-layer-modes.c @@ -158,6 +158,24 @@ gimp_layer_mode_is_linear (GimpLayerMode mode) return FALSE; } +GimpLayerBlendTRC +gimp_layer_mode_get_blend_trc (GimpLayerMode mode) +{ + return GIMP_LAYER_BLEND_RGB_LINEAR; +} + +GimpLayerBlendTRC +gimp_layer_mode_get_composite_trc (GimpLayerMode mode) +{ + return GIMP_LAYER_BLEND_RGB_LINEAR; +} + +GimpLayerCompositeMode +gimp_layer_mode_get_composite_mode (GimpLayerMode mode) +{ + return GIMP_LAYER_COMPOSITE_OVER; +} + const gchar * gimp_layer_mode_get_operation (GimpLayerMode mode) { diff --git a/app/core/gimp-layer-modes.h b/app/core/gimp-layer-modes.h index 9c0962821f..783248f298 100644 --- a/app/core/gimp-layer-modes.h +++ b/app/core/gimp-layer-modes.h @@ -23,10 +23,14 @@ #define __GIMP_LAYER_MODES_H__ -gboolean gimp_layer_mode_is_legacy (GimpLayerMode mode); -gboolean gimp_layer_mode_is_linear (GimpLayerMode mode); +gboolean gimp_layer_mode_is_legacy (GimpLayerMode mode); +gboolean gimp_layer_mode_is_linear (GimpLayerMode mode); -const gchar * gimp_layer_mode_get_operation (GimpLayerMode mode); +GimpLayerBlendTRC gimp_layer_mode_get_blend_trc (GimpLayerMode mode); +GimpLayerBlendTRC gimp_layer_mode_get_composite_trc (GimpLayerMode mode); +GimpLayerCompositeMode gimp_layer_mode_get_composite_mode (GimpLayerMode mode); + +const gchar * gimp_layer_mode_get_operation (GimpLayerMode mode); #endif /* __GIMP_LAYER_MODES_H__ */ diff --git a/app/gegl/gimp-gegl-nodes.c b/app/gegl/gimp-gegl-nodes.c index 87fc1ba823..9341c2e71c 100644 --- a/app/gegl/gimp-gegl-nodes.c +++ b/app/gegl/gimp-gegl-nodes.c @@ -157,9 +157,12 @@ gimp_gegl_mode_node_set_mode (GeglNode *node, * all its properties */ gegl_node_set (node, - "operation", gimp_layer_mode_get_operation (mode), - "opacity", opacity, - "linear", gimp_layer_mode_is_linear (mode), + "operation", gimp_layer_mode_get_operation (mode), + "opacity", opacity, + "linear", gimp_layer_mode_is_linear (mode), + "blend-trc", gimp_layer_mode_get_blend_trc (mode), + "composite-trc", gimp_layer_mode_get_composite_trc (mode), + "composite-mode", gimp_layer_mode_get_composite_mode (mode), NULL); } diff --git a/app/operations/layer-modes/gimpoperationpointlayermode.c b/app/operations/layer-modes/gimpoperationpointlayermode.c index 3b19cc8027..419f1c162b 100644 --- a/app/operations/layer-modes/gimpoperationpointlayermode.c +++ b/app/operations/layer-modes/gimpoperationpointlayermode.c @@ -36,7 +36,10 @@ enum { PROP_0, PROP_LINEAR, - PROP_OPACITY + PROP_OPACITY, + PROP_BLEND_TRC, + PROP_COMPOSITE_TRC, + PROP_COMPOSITE_MODE }; @@ -88,6 +91,32 @@ gimp_operation_point_layer_mode_class_init (GimpOperationPointLayerModeClass *kl 0.0, 1.0, 1.0, GIMP_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property (object_class, PROP_BLEND_TRC, + g_param_spec_enum ("blend-trc", + NULL, NULL, + GIMP_TYPE_LAYER_BLEND_TRC, + GIMP_LAYER_BLEND_RGB_LINEAR, + GIMP_PARAM_READWRITE | + G_PARAM_CONSTRUCT)); + + + g_object_class_install_property (object_class, PROP_COMPOSITE_TRC, + g_param_spec_enum ("composite-trc", + NULL, NULL, + GIMP_TYPE_LAYER_BLEND_TRC, + GIMP_LAYER_BLEND_RGB_LINEAR, + GIMP_PARAM_READWRITE | + G_PARAM_CONSTRUCT)); + + g_object_class_install_property (object_class, PROP_COMPOSITE_MODE, + g_param_spec_enum ("composite-mode", + NULL, NULL, + GIMP_TYPE_LAYER_COMPOSITE_MODE, + GIMP_LAYER_COMPOSITE_SRC_OVER, + GIMP_PARAM_READWRITE | + G_PARAM_CONSTRUCT)); + } static void @@ -113,6 +142,18 @@ gimp_operation_point_layer_mode_set_property (GObject *object, self->opacity = g_value_get_double (value); break; + case PROP_BLEND_TRC: + self->blend_trc = g_value_get_enum (value); + break; + + case PROP_COMPOSITE_TRC: + self->composite_trc = g_value_get_enum (value); + break; + + case PROP_COMPOSITE_MODE: + self->composite_mode = g_value_get_enum (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -137,6 +178,18 @@ gimp_operation_point_layer_mode_get_property (GObject *object, g_value_set_double (value, self->opacity); break; + case PROP_BLEND_TRC: + g_value_set_enum (value, self->blend_trc); + break; + + case PROP_COMPOSITE_TRC: + g_value_set_enum (value, self->composite_trc); + break; + + case PROP_COMPOSITE_MODE: + g_value_set_enum (value, self->composite_mode); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -176,7 +229,7 @@ gimp_operation_point_layer_mode_process (GeglOperation *operation, { GObject *input; - /* get the raw values this does not increase the reference count */ + /* get the raw values, this does not increase the reference count */ input = gegl_operation_context_get_object (context, "input"); if (input) diff --git a/app/operations/layer-modes/gimpoperationpointlayermode.h b/app/operations/layer-modes/gimpoperationpointlayermode.h index af0a6e0983..630e060f73 100644 --- a/app/operations/layer-modes/gimpoperationpointlayermode.h +++ b/app/operations/layer-modes/gimpoperationpointlayermode.h @@ -46,6 +46,9 @@ struct _GimpOperationPointLayerMode gboolean linear; gdouble opacity; + GimpLayerBlendTRC blend_trc; + GimpLayerBlendTRC composite_trc; + GimpLayerCompositeMode composite_mode; };