diff --git a/app/core/Makefile.am b/app/core/Makefile.am index 3a28eb44ff..20f439f452 100644 --- a/app/core/Makefile.am +++ b/app/core/Makefile.am @@ -44,8 +44,6 @@ libappcore_a_sources = \ gimp-gradients.h \ gimp-gui.c \ gimp-gui.h \ - gimp-layer-modes.c \ - gimp-layer-modes.h \ gimp-memsize.c \ gimp-memsize.h \ gimp-modules.c \ diff --git a/app/core/core-enums.c b/app/core/core-enums.c index c76109f05e..25c04c9793 100644 --- a/app/core/core-enums.c +++ b/app/core/core-enums.c @@ -284,224 +284,6 @@ gimp_histogram_channel_get_type (void) return type; } -GType -gimp_layer_mode_get_type (void) -{ - static const GEnumValue values[] = - { - { GIMP_LAYER_MODE_NORMAL, "GIMP_LAYER_MODE_NORMAL", "normal" }, - { GIMP_LAYER_MODE_DISSOLVE, "GIMP_LAYER_MODE_DISSOLVE", "dissolve" }, - { GIMP_LAYER_MODE_BEHIND, "GIMP_LAYER_MODE_BEHIND", "behind" }, - { GIMP_LAYER_MODE_MULTIPLY_LEGACY, "GIMP_LAYER_MODE_MULTIPLY_LEGACY", "multiply-legacy" }, - { GIMP_LAYER_MODE_SCREEN_LEGACY, "GIMP_LAYER_MODE_SCREEN_LEGACY", "screen-legacy" }, - { GIMP_LAYER_MODE_OVERLAY_LEGACY, "GIMP_LAYER_MODE_OVERLAY_LEGACY", "overlay-legacy" }, - { GIMP_LAYER_MODE_DIFFERENCE_LEGACY, "GIMP_LAYER_MODE_DIFFERENCE_LEGACY", "difference-legacy" }, - { GIMP_LAYER_MODE_ADDITION_LEGACY, "GIMP_LAYER_MODE_ADDITION_LEGACY", "addition-legacy" }, - { GIMP_LAYER_MODE_SUBTRACT_LEGACY, "GIMP_LAYER_MODE_SUBTRACT_LEGACY", "subtract-legacy" }, - { GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY, "GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY", "darken-only-legacy" }, - { GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY, "GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY", "lighten-only-legacy" }, - { GIMP_LAYER_MODE_HSV_HUE_LEGACY, "GIMP_LAYER_MODE_HSV_HUE_LEGACY", "hsv-hue-legacy" }, - { GIMP_LAYER_MODE_HSV_SATURATION_LEGACY, "GIMP_LAYER_MODE_HSV_SATURATION_LEGACY", "hsv-saturation-legacy" }, - { GIMP_LAYER_MODE_HSV_COLOR_LEGACY, "GIMP_LAYER_MODE_HSV_COLOR_LEGACY", "hsv-color-legacy" }, - { GIMP_LAYER_MODE_HSV_VALUE_LEGACY, "GIMP_LAYER_MODE_HSV_VALUE_LEGACY", "hsv-value-legacy" }, - { GIMP_LAYER_MODE_DIVIDE_LEGACY, "GIMP_LAYER_MODE_DIVIDE_LEGACY", "divide-legacy" }, - { GIMP_LAYER_MODE_DODGE_LEGACY, "GIMP_LAYER_MODE_DODGE_LEGACY", "dodge-legacy" }, - { GIMP_LAYER_MODE_BURN_LEGACY, "GIMP_LAYER_MODE_BURN_LEGACY", "burn-legacy" }, - { GIMP_LAYER_MODE_HARDLIGHT_LEGACY, "GIMP_LAYER_MODE_HARDLIGHT_LEGACY", "hardlight-legacy" }, - { GIMP_LAYER_MODE_SOFTLIGHT_LEGACY, "GIMP_LAYER_MODE_SOFTLIGHT_LEGACY", "softlight-legacy" }, - { GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY, "GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY", "grain-extract-legacy" }, - { GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY, "GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY", "grain-merge-legacy" }, - { GIMP_LAYER_MODE_COLOR_ERASE, "GIMP_LAYER_MODE_COLOR_ERASE", "color-erase" }, - { GIMP_LAYER_MODE_OVERLAY, "GIMP_LAYER_MODE_OVERLAY", "overlay" }, - { GIMP_LAYER_MODE_LCH_HUE, "GIMP_LAYER_MODE_LCH_HUE", "lch-hue" }, - { GIMP_LAYER_MODE_LCH_CHROMA, "GIMP_LAYER_MODE_LCH_CHROMA", "lch-chroma" }, - { GIMP_LAYER_MODE_LCH_COLOR, "GIMP_LAYER_MODE_LCH_COLOR", "lch-color" }, - { GIMP_LAYER_MODE_LCH_LIGHTNESS, "GIMP_LAYER_MODE_LCH_LIGHTNESS", "lch-lightness" }, - { GIMP_LAYER_MODE_NORMAL_LINEAR, "GIMP_LAYER_MODE_NORMAL_LINEAR", "normal-linear" }, - { GIMP_LAYER_MODE_BEHIND_LINEAR, "GIMP_LAYER_MODE_BEHIND_LINEAR", "behind-linear" }, - { GIMP_LAYER_MODE_MULTIPLY, "GIMP_LAYER_MODE_MULTIPLY", "multiply" }, - { GIMP_LAYER_MODE_MULTIPLY_LINEAR, "GIMP_LAYER_MODE_MULTIPLY_LINEAR", "multiply-linear" }, - { GIMP_LAYER_MODE_SCREEN, "GIMP_LAYER_MODE_SCREEN", "screen" }, - { GIMP_LAYER_MODE_SCREEN_LINEAR, "GIMP_LAYER_MODE_SCREEN_LINEAR", "screen-linear" }, - { GIMP_LAYER_MODE_OVERLAY_LINEAR, "GIMP_LAYER_MODE_OVERLAY_LINEAR", "overlay-linear" }, - { GIMP_LAYER_MODE_DIFFERENCE, "GIMP_LAYER_MODE_DIFFERENCE", "difference" }, - { GIMP_LAYER_MODE_DIFFERENCE_LINEAR, "GIMP_LAYER_MODE_DIFFERENCE_LINEAR", "difference-linear" }, - { GIMP_LAYER_MODE_ADDITION, "GIMP_LAYER_MODE_ADDITION", "addition" }, - { GIMP_LAYER_MODE_ADDITION_LINEAR, "GIMP_LAYER_MODE_ADDITION_LINEAR", "addition-linear" }, - { GIMP_LAYER_MODE_SUBTRACT, "GIMP_LAYER_MODE_SUBTRACT", "subtract" }, - { GIMP_LAYER_MODE_SUBTRACT_LINEAR, "GIMP_LAYER_MODE_SUBTRACT_LINEAR", "subtract-linear" }, - { GIMP_LAYER_MODE_DARKEN_ONLY, "GIMP_LAYER_MODE_DARKEN_ONLY", "darken-only" }, - { GIMP_LAYER_MODE_LIGHTEN_ONLY, "GIMP_LAYER_MODE_LIGHTEN_ONLY", "lighten-only" }, - { GIMP_LAYER_MODE_HSV_HUE, "GIMP_LAYER_MODE_HSV_HUE", "hsv-hue" }, - { GIMP_LAYER_MODE_HSV_SATURATION, "GIMP_LAYER_MODE_HSV_SATURATION", "hsv-saturation" }, - { GIMP_LAYER_MODE_HSV_COLOR, "GIMP_LAYER_MODE_HSV_COLOR", "hsv-color" }, - { GIMP_LAYER_MODE_HSV_VALUE, "GIMP_LAYER_MODE_HSV_VALUE", "hsv-value" }, - { GIMP_LAYER_MODE_DIVIDE, "GIMP_LAYER_MODE_DIVIDE", "divide" }, - { GIMP_LAYER_MODE_DIVIDE_LINEAR, "GIMP_LAYER_MODE_DIVIDE_LINEAR", "divide-linear" }, - { GIMP_LAYER_MODE_DODGE, "GIMP_LAYER_MODE_DODGE", "dodge" }, - { GIMP_LAYER_MODE_DODGE_LINEAR, "GIMP_LAYER_MODE_DODGE_LINEAR", "dodge-linear" }, - { GIMP_LAYER_MODE_BURN, "GIMP_LAYER_MODE_BURN", "burn" }, - { GIMP_LAYER_MODE_BURN_LINEAR, "GIMP_LAYER_MODE_BURN_LINEAR", "burn-linear" }, - { GIMP_LAYER_MODE_HARDLIGHT, "GIMP_LAYER_MODE_HARDLIGHT", "hardlight" }, - { GIMP_LAYER_MODE_HARDLIGHT_LINEAR, "GIMP_LAYER_MODE_HARDLIGHT_LINEAR", "hardlight-linear" }, - { GIMP_LAYER_MODE_SOFTLIGHT, "GIMP_LAYER_MODE_SOFTLIGHT", "softlight" }, - { GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, "GIMP_LAYER_MODE_SOFTLIGHT_LINEAR", "softlight-linear" }, - { GIMP_LAYER_MODE_GRAIN_EXTRACT, "GIMP_LAYER_MODE_GRAIN_EXTRACT", "grain-extract" }, - { GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, "GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR", "grain-extract-linear" }, - { GIMP_LAYER_MODE_GRAIN_MERGE, "GIMP_LAYER_MODE_GRAIN_MERGE", "grain-merge" }, - { GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, "GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR", "grain-merge-linear" }, - { GIMP_LAYER_MODE_VIVID_LIGHT, "GIMP_LAYER_MODE_VIVID_LIGHT", "vivid-light" }, - { GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, "GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR", "vivid-light-linear" }, - { GIMP_LAYER_MODE_PIN_LIGHT, "GIMP_LAYER_MODE_PIN_LIGHT", "pin-light" }, - { GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, "GIMP_LAYER_MODE_PIN_LIGHT_LINEAR", "pin-light-linear" }, - { GIMP_LAYER_MODE_LINEAR_LIGHT, "GIMP_LAYER_MODE_LINEAR_LIGHT", "linear-light" }, - { GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, "GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR", "linear-light-linear" }, - { GIMP_LAYER_MODE_HARD_MIX, "GIMP_LAYER_MODE_HARD_MIX", "hard-mix" }, - { GIMP_LAYER_MODE_HARD_MIX_LINEAR, "GIMP_LAYER_MODE_HARD_MIX_LINEAR", "hard-mix-linear" }, - { GIMP_LAYER_MODE_EXCLUSION, "GIMP_LAYER_MODE_EXCLUSION", "exclusion" }, - { GIMP_LAYER_MODE_EXCLUSION_LINEAR, "GIMP_LAYER_MODE_EXCLUSION_LINEAR", "exclusion-linear" }, - { GIMP_LAYER_MODE_LINEAR_BURN, "GIMP_LAYER_MODE_LINEAR_BURN", "linear-burn" }, - { GIMP_LAYER_MODE_LINEAR_BURN_LINEAR, "GIMP_LAYER_MODE_LINEAR_BURN_LINEAR", "linear-burn-linear" }, - { GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, "GIMP_LAYER_MODE_LUMA_DARKEN_ONLY", "luma-darken-only" }, - { GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, "GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY", "luminance-darken-only" }, - { GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, "GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY", "luma-lighten-only" }, - { GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, "GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY", "luminance-lighten-only" }, - { GIMP_LAYER_MODE_ERASE, "GIMP_LAYER_MODE_ERASE", "erase" }, - { GIMP_LAYER_MODE_REPLACE, "GIMP_LAYER_MODE_REPLACE", "replace" }, - { GIMP_LAYER_MODE_ANTI_ERASE, "GIMP_LAYER_MODE_ANTI_ERASE", "anti-erase" }, - { 0, NULL, NULL } - }; - - static const GimpEnumDesc descs[] = - { - { GIMP_LAYER_MODE_NORMAL, NC_("layer-mode", "Normal"), NULL }, - { GIMP_LAYER_MODE_DISSOLVE, NC_("layer-mode", "Dissolve"), NULL }, - { GIMP_LAYER_MODE_BEHIND, NC_("layer-mode", "Behind"), NULL }, - { GIMP_LAYER_MODE_MULTIPLY_LEGACY, NC_("layer-mode", "Multiply (legacy)"), NULL }, - { GIMP_LAYER_MODE_SCREEN_LEGACY, NC_("layer-mode", "Screen (legacy)"), NULL }, - { GIMP_LAYER_MODE_OVERLAY_LEGACY, NC_("layer-mode", "Old broken Overlay"), NULL }, - { GIMP_LAYER_MODE_DIFFERENCE_LEGACY, NC_("layer-mode", "Difference (legacy)"), NULL }, - { GIMP_LAYER_MODE_ADDITION_LEGACY, NC_("layer-mode", "Addition (legacy)"), NULL }, - { GIMP_LAYER_MODE_SUBTRACT_LEGACY, NC_("layer-mode", "Subtract (legacy)"), NULL }, - { GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY, NC_("layer-mode", "Darken only (legacy)"), NULL }, - { GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY, NC_("layer-mode", "Lighten only (legacy)"), NULL }, - { GIMP_LAYER_MODE_HSV_HUE_LEGACY, NC_("layer-mode", "Hue (HSV) (legacy)"), NULL }, - { GIMP_LAYER_MODE_HSV_SATURATION_LEGACY, NC_("layer-mode", "Saturation (HSV) (legacy)"), NULL }, - { GIMP_LAYER_MODE_HSV_COLOR_LEGACY, NC_("layer-mode", "Color (HSV) (legacy)"), NULL }, - { GIMP_LAYER_MODE_HSV_VALUE_LEGACY, NC_("layer-mode", "Value (HSV) (legacy)"), NULL }, - { GIMP_LAYER_MODE_DIVIDE_LEGACY, NC_("layer-mode", "Divide (legacy)"), NULL }, - { GIMP_LAYER_MODE_DODGE_LEGACY, NC_("layer-mode", "Dodge (legacy)"), NULL }, - { GIMP_LAYER_MODE_BURN_LEGACY, NC_("layer-mode", "Burn (legacy)"), NULL }, - { GIMP_LAYER_MODE_HARDLIGHT_LEGACY, NC_("layer-mode", "Hard light (legacy)"), NULL }, - { GIMP_LAYER_MODE_SOFTLIGHT_LEGACY, NC_("layer-mode", "Soft light (legacy)"), NULL }, - { GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY, NC_("layer-mode", "Grain extract (legacy)"), NULL }, - { GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY, NC_("layer-mode", "Grain merge (legacy)"), NULL }, - { GIMP_LAYER_MODE_COLOR_ERASE, NC_("layer-mode", "Color erase"), NULL }, - { GIMP_LAYER_MODE_OVERLAY, NC_("layer-mode", "Overlay"), NULL }, - { GIMP_LAYER_MODE_LCH_HUE, NC_("layer-mode", "Hue (LCH)"), NULL }, - { GIMP_LAYER_MODE_LCH_CHROMA, NC_("layer-mode", "Chroma (LCH)"), NULL }, - { GIMP_LAYER_MODE_LCH_COLOR, NC_("layer-mode", "Color (LCH)"), NULL }, - { GIMP_LAYER_MODE_LCH_LIGHTNESS, NC_("layer-mode", "Lightness (LCH)"), NULL }, - { GIMP_LAYER_MODE_NORMAL_LINEAR, NC_("layer-mode", "Normal (linear)"), NULL }, - { GIMP_LAYER_MODE_BEHIND_LINEAR, NC_("layer-mode", "Behind (linear)"), NULL }, - { GIMP_LAYER_MODE_MULTIPLY, NC_("layer-mode", "Multiply"), NULL }, - { GIMP_LAYER_MODE_MULTIPLY_LINEAR, NC_("layer-mode", "Multiply (linear)"), NULL }, - { GIMP_LAYER_MODE_SCREEN, NC_("layer-mode", "Screen"), NULL }, - { GIMP_LAYER_MODE_SCREEN_LINEAR, NC_("layer-mode", "Screen (linear)"), NULL }, - { GIMP_LAYER_MODE_OVERLAY_LINEAR, NC_("layer-mode", "Overlay (linear)"), NULL }, - { GIMP_LAYER_MODE_DIFFERENCE, NC_("layer-mode", "Difference"), NULL }, - { GIMP_LAYER_MODE_DIFFERENCE_LINEAR, NC_("layer-mode", "Difference (linear)"), NULL }, - { GIMP_LAYER_MODE_ADDITION, NC_("layer-mode", "Addition"), NULL }, - { GIMP_LAYER_MODE_ADDITION_LINEAR, NC_("layer-mode", "Addition (linear)"), NULL }, - { GIMP_LAYER_MODE_SUBTRACT, NC_("layer-mode", "Subtract"), NULL }, - { GIMP_LAYER_MODE_SUBTRACT_LINEAR, NC_("layer-mode", "Subtract (linear)"), NULL }, - { GIMP_LAYER_MODE_DARKEN_ONLY, NC_("layer-mode", "Darken only"), NULL }, - { GIMP_LAYER_MODE_LIGHTEN_ONLY, NC_("layer-mode", "Lighten only"), NULL }, - { GIMP_LAYER_MODE_HSV_HUE, NC_("layer-mode", "Hue (HSV)"), NULL }, - { GIMP_LAYER_MODE_HSV_SATURATION, NC_("layer-mode", "Saturation (HSV)"), NULL }, - { GIMP_LAYER_MODE_HSV_COLOR, NC_("layer-mode", "Color (HSV)"), NULL }, - { GIMP_LAYER_MODE_HSV_VALUE, NC_("layer-mode", "Value (HSV)"), NULL }, - { GIMP_LAYER_MODE_DIVIDE, NC_("layer-mode", "Divide"), NULL }, - { GIMP_LAYER_MODE_DIVIDE_LINEAR, NC_("layer-mode", "Divide (linear)"), NULL }, - { GIMP_LAYER_MODE_DODGE, NC_("layer-mode", "Dodge"), NULL }, - { GIMP_LAYER_MODE_DODGE_LINEAR, NC_("layer-mode", "Dodge (linear)"), NULL }, - { GIMP_LAYER_MODE_BURN, NC_("layer-mode", "Burn"), NULL }, - { GIMP_LAYER_MODE_BURN_LINEAR, NC_("layer-mode", "Burn (linear)"), NULL }, - { GIMP_LAYER_MODE_HARDLIGHT, NC_("layer-mode", "Hard light"), NULL }, - { GIMP_LAYER_MODE_HARDLIGHT_LINEAR, NC_("layer-mode", "Hard light (linear)"), NULL }, - { GIMP_LAYER_MODE_SOFTLIGHT, NC_("layer-mode", "Soft light"), NULL }, - { GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, NC_("layer-mode", "Soft light (linear)"), NULL }, - { GIMP_LAYER_MODE_GRAIN_EXTRACT, NC_("layer-mode", "Grain extract"), NULL }, - { GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, NC_("layer-mode", "Grain extract (linear)"), NULL }, - { GIMP_LAYER_MODE_GRAIN_MERGE, NC_("layer-mode", "Grain merge"), NULL }, - { GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, NC_("layer-mode", "Grain merge (linear)"), NULL }, - { GIMP_LAYER_MODE_VIVID_LIGHT, NC_("layer-mode", "Vivid light"), NULL }, - { GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, NC_("layer-mode", "Vivid light (linear)"), NULL }, - { GIMP_LAYER_MODE_PIN_LIGHT, NC_("layer-mode", "Pin light"), NULL }, - { GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, NC_("layer-mode", "Pin light (linear)"), NULL }, - { GIMP_LAYER_MODE_LINEAR_LIGHT, NC_("layer-mode", "Linear light"), NULL }, - { GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, NC_("layer-mode", "Linear light (linear)"), NULL }, - { GIMP_LAYER_MODE_HARD_MIX, NC_("layer-mode", "Hard mix"), NULL }, - { GIMP_LAYER_MODE_HARD_MIX_LINEAR, NC_("layer-mode", "Hard mix (linear)"), NULL }, - { GIMP_LAYER_MODE_EXCLUSION, NC_("layer-mode", "Exclusion"), NULL }, - { GIMP_LAYER_MODE_EXCLUSION_LINEAR, NC_("layer-mode", "Exclusion (linear)"), NULL }, - { GIMP_LAYER_MODE_LINEAR_BURN, NC_("layer-mode", "Linear burn"), NULL }, - { GIMP_LAYER_MODE_LINEAR_BURN_LINEAR, NC_("layer-mode", "Linear burn (linear)"), NULL }, - { GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, NC_("layer-mode", "Luma darken only"), NULL }, - { GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, NC_("layer-mode", "Luminance darken only"), NULL }, - { GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, NC_("layer-mode", "Luma lighten only"), NULL }, - { GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, NC_("layer-mode", "Luminance lighten only"), NULL }, - { GIMP_LAYER_MODE_ERASE, NC_("layer-mode", "Erase"), NULL }, - { GIMP_LAYER_MODE_REPLACE, NC_("layer-mode", "Replace"), NULL }, - { GIMP_LAYER_MODE_ANTI_ERASE, NC_("layer-mode", "Anti erase"), NULL }, - { 0, NULL, NULL } - }; - - static GType type = 0; - - if (G_UNLIKELY (! type)) - { - type = g_enum_register_static ("GimpLayerMode", values); - gimp_type_set_translation_context (type, "layer-mode"); - gimp_enum_set_value_descriptions (type, descs); - } - - return type; -} - -GType -gimp_layer_mode_group_get_type (void) -{ - static const GEnumValue values[] = - { - { GIMP_LAYER_MODE_GROUP_DEFAULT, "GIMP_LAYER_MODE_GROUP_DEFAULT", "default" }, - { GIMP_LAYER_MODE_GROUP_LINEAR, "GIMP_LAYER_MODE_GROUP_LINEAR", "linear" }, - { GIMP_LAYER_MODE_GROUP_PERCEPTUAL, "GIMP_LAYER_MODE_GROUP_PERCEPTUAL", "perceptual" }, - { GIMP_LAYER_MODE_GROUP_LEGACY, "GIMP_LAYER_MODE_GROUP_LEGACY", "legacy" }, - { 0, NULL, NULL } - }; - - static const GimpEnumDesc descs[] = - { - { GIMP_LAYER_MODE_GROUP_DEFAULT, NC_("layer-mode-group", "Default"), NULL }, - { GIMP_LAYER_MODE_GROUP_LINEAR, NC_("layer-mode-group", "Linear light"), NULL }, - { GIMP_LAYER_MODE_GROUP_PERCEPTUAL, NC_("layer-mode-group", "Perceptual"), NULL }, - { GIMP_LAYER_MODE_GROUP_LEGACY, NC_("layer-mode-group", "Legacy"), NULL }, - { 0, NULL, NULL } - }; - - static GType type = 0; - - if (G_UNLIKELY (! type)) - { - type = g_enum_register_static ("GimpLayerModeGroup", values); - gimp_type_set_translation_context (type, "layer-mode-group"); - gimp_enum_set_value_descriptions (type, descs); - } - - return type; -} - GType gimp_matting_engine_get_type (void) { diff --git a/app/core/core-enums.h b/app/core/core-enums.h index 75b59a1914..44b2e75296 100644 --- a/app/core/core-enums.h +++ b/app/core/core-enums.h @@ -148,115 +148,6 @@ typedef enum } GimpHistogramChannel; -#define GIMP_TYPE_LAYER_MODE (gimp_layer_mode_get_type ()) - -GType gimp_layer_mode_get_type (void) G_GNUC_CONST; - -typedef enum -{ - /* Modes that exist since ancient times */ - GIMP_LAYER_MODE_NORMAL, /*< desc="Normal" >*/ - GIMP_LAYER_MODE_DISSOLVE, /*< desc="Dissolve" >*/ - GIMP_LAYER_MODE_BEHIND, /*< desc="Behind" >*/ - GIMP_LAYER_MODE_MULTIPLY_LEGACY, /*< desc="Multiply (legacy)" >*/ - GIMP_LAYER_MODE_SCREEN_LEGACY, /*< desc="Screen (legacy)" >*/ - GIMP_LAYER_MODE_OVERLAY_LEGACY, /*< desc="Old broken Overlay" >*/ - GIMP_LAYER_MODE_DIFFERENCE_LEGACY, /*< desc="Difference (legacy)" >*/ - GIMP_LAYER_MODE_ADDITION_LEGACY, /*< desc="Addition (legacy)" >*/ - GIMP_LAYER_MODE_SUBTRACT_LEGACY, /*< desc="Subtract (legacy)" >*/ - GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY, /*< desc="Darken only (legacy)" >*/ - GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY, /*< desc="Lighten only (legacy)" >*/ - GIMP_LAYER_MODE_HSV_HUE_LEGACY, /*< desc="Hue (HSV) (legacy)" >*/ - GIMP_LAYER_MODE_HSV_SATURATION_LEGACY, /*< desc="Saturation (HSV) (legacy)">*/ - GIMP_LAYER_MODE_HSV_COLOR_LEGACY, /*< desc="Color (HSV) (legacy)" >*/ - GIMP_LAYER_MODE_HSV_VALUE_LEGACY, /*< desc="Value (HSV) (legacy)" >*/ - GIMP_LAYER_MODE_DIVIDE_LEGACY, /*< desc="Divide (legacy)" >*/ - GIMP_LAYER_MODE_DODGE_LEGACY, /*< desc="Dodge (legacy)" >*/ - GIMP_LAYER_MODE_BURN_LEGACY, /*< desc="Burn (legacy)" >*/ - GIMP_LAYER_MODE_HARDLIGHT_LEGACY, /*< desc="Hard light (legacy)" >*/ - GIMP_LAYER_MODE_SOFTLIGHT_LEGACY, /*< desc="Soft light (legacy)" >*/ - GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY, /*< desc="Grain extract (legacy)" >*/ - GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY, /*< desc="Grain merge (legacy)" >*/ - GIMP_LAYER_MODE_COLOR_ERASE, /*< desc="Color erase" >*/ - - /* Since 2.8 */ - GIMP_LAYER_MODE_OVERLAY, /*< desc="Overlay" >*/ - GIMP_LAYER_MODE_LCH_HUE, /*< desc="Hue (LCH)" >*/ - GIMP_LAYER_MODE_LCH_CHROMA, /*< desc="Chroma (LCH)" >*/ - GIMP_LAYER_MODE_LCH_COLOR, /*< desc="Color (LCH)" >*/ - GIMP_LAYER_MODE_LCH_LIGHTNESS, /*< desc="Lightness (LCH)" >*/ - - /* Since 2.10 */ - GIMP_LAYER_MODE_NORMAL_LINEAR, /*< desc="Normal (linear)" >*/ - GIMP_LAYER_MODE_BEHIND_LINEAR, /*< desc="Behind (linear)" >*/ - GIMP_LAYER_MODE_MULTIPLY, /*< desc="Multiply" >*/ - GIMP_LAYER_MODE_MULTIPLY_LINEAR, /*< desc="Multiply (linear)" >*/ - GIMP_LAYER_MODE_SCREEN, /*< desc="Screen" >*/ - GIMP_LAYER_MODE_SCREEN_LINEAR, /*< desc="Screen (linear)" >*/ - GIMP_LAYER_MODE_OVERLAY_LINEAR, /*< desc="Overlay (linear)" >*/ - GIMP_LAYER_MODE_DIFFERENCE, /*< desc="Difference" >*/ - GIMP_LAYER_MODE_DIFFERENCE_LINEAR, /*< desc="Difference (linear)" >*/ - GIMP_LAYER_MODE_ADDITION, /*< desc="Addition" >*/ - GIMP_LAYER_MODE_ADDITION_LINEAR, /*< desc="Addition (linear)" >*/ - GIMP_LAYER_MODE_SUBTRACT, /*< desc="Subtract" >*/ - GIMP_LAYER_MODE_SUBTRACT_LINEAR, /*< desc="Subtract (linear)" >*/ - GIMP_LAYER_MODE_DARKEN_ONLY, /*< desc="Darken only" >*/ - GIMP_LAYER_MODE_LIGHTEN_ONLY, /*< desc="Lighten only" >*/ - GIMP_LAYER_MODE_HSV_HUE, /*< desc="Hue (HSV)" >*/ - GIMP_LAYER_MODE_HSV_SATURATION, /*< desc="Saturation (HSV)" >*/ - GIMP_LAYER_MODE_HSV_COLOR, /*< desc="Color (HSV)" >*/ - GIMP_LAYER_MODE_HSV_VALUE, /*< desc="Value (HSV)" >*/ - GIMP_LAYER_MODE_DIVIDE, /*< desc="Divide" >*/ - GIMP_LAYER_MODE_DIVIDE_LINEAR, /*< desc="Divide (linear)" >*/ - GIMP_LAYER_MODE_DODGE, /*< desc="Dodge" >*/ - GIMP_LAYER_MODE_DODGE_LINEAR, /*< desc="Dodge (linear)" >*/ - GIMP_LAYER_MODE_BURN, /*< desc="Burn" >*/ - GIMP_LAYER_MODE_BURN_LINEAR, /*< desc="Burn (linear)" >*/ - GIMP_LAYER_MODE_HARDLIGHT, /*< desc="Hard light" >*/ - GIMP_LAYER_MODE_HARDLIGHT_LINEAR, /*< desc="Hard light (linear)" >*/ - GIMP_LAYER_MODE_SOFTLIGHT, /*< desc="Soft light" >*/ - GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, /*< desc="Soft light (linear)" >*/ - GIMP_LAYER_MODE_GRAIN_EXTRACT, /*< desc="Grain extract" >*/ - GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, /*< desc="Grain extract (linear)" >*/ - GIMP_LAYER_MODE_GRAIN_MERGE, /*< desc="Grain merge" >*/ - GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, /*< desc="Grain merge (linear)" >*/ - GIMP_LAYER_MODE_VIVID_LIGHT, /*< desc="Vivid light" >*/ - GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, /*< desc="Vivid light (linear)" >*/ - GIMP_LAYER_MODE_PIN_LIGHT, /*< desc="Pin light" >*/ - GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, /*< desc="Pin light (linear)" >*/ - GIMP_LAYER_MODE_LINEAR_LIGHT, /*< desc="Linear light" >*/ - GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, /*< desc="Linear light (linear)" >*/ - GIMP_LAYER_MODE_HARD_MIX, /*< desc="Hard mix" >*/ - GIMP_LAYER_MODE_HARD_MIX_LINEAR, /*< desc="Hard mix (linear)" >*/ - GIMP_LAYER_MODE_EXCLUSION, /*< desc="Exclusion" >*/ - GIMP_LAYER_MODE_EXCLUSION_LINEAR, /*< desc="Exclusion (linear)" >*/ - GIMP_LAYER_MODE_LINEAR_BURN, /*< desc="Linear burn" >*/ - GIMP_LAYER_MODE_LINEAR_BURN_LINEAR, /*< desc="Linear burn (linear)" >*/ - GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, /*< desc="Luma darken only" >*/ - GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, /*< desc="Luminance darken only" >*/ - GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, /*< desc="Luma lighten only" >*/ - GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY,/*< desc="Luminance lighten only" >*/ - - /* Internal modes, not available to the PDB */ - GIMP_LAYER_MODE_ERASE = 1000, /*< pdb-skip, desc="Erase" >*/ - GIMP_LAYER_MODE_REPLACE = 1001, /*< pdb-skip, desc="Replace" >*/ - GIMP_LAYER_MODE_ANTI_ERASE = 1002 /*< pdb-skip, desc="Anti erase" >*/ -} GimpLayerMode; - - -#define GIMP_TYPE_LAYER_MODE_GROUP (gimp_layer_mode_group_get_type ()) - -GType gimp_layer_mode_group_get_type (void) G_GNUC_CONST; - -typedef enum /*< pdb-skip >*/ -{ - GIMP_LAYER_MODE_GROUP_DEFAULT, /*< desc="Default" >*/ - GIMP_LAYER_MODE_GROUP_LINEAR, /*< desc="Linear light" >*/ - GIMP_LAYER_MODE_GROUP_PERCEPTUAL, /*< desc="Perceptual" >*/ - GIMP_LAYER_MODE_GROUP_LEGACY, /*< desc="Legacy" >*/ -} GimpLayerModeGroup; - - #define GIMP_TYPE_MATTING_ENGINE (gimp_matting_engine_get_type ()) GType gimp_matting_engine_get_type (void) G_GNUC_CONST; diff --git a/app/core/gimp-layer-modes.c b/app/core/gimp-layer-modes.c deleted file mode 100644 index 9e0d0a773a..0000000000 --- a/app/core/gimp-layer-modes.c +++ /dev/null @@ -1,574 +0,0 @@ -/* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * gimp-layer-modes.c - * Copyright (C) 2017 Michael Natterer - * Øyvind Kolås - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "config.h" - -#include - -#include "core-types.h" - -#include "gimp-layer-modes.h" - -#include "operations/layer-modes/gimpoperationlayermode.h" - - -/* static variables */ - -static const GimpLayerMode layer_mode_group_default[] = -{ - GIMP_LAYER_MODE_NORMAL, - GIMP_LAYER_MODE_DISSOLVE, - - GIMP_LAYER_MODE_LIGHTEN_ONLY, - GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, - GIMP_LAYER_MODE_SCREEN, - GIMP_LAYER_MODE_DODGE, - GIMP_LAYER_MODE_ADDITION, - - GIMP_LAYER_MODE_DARKEN_ONLY, - GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, - GIMP_LAYER_MODE_MULTIPLY, - GIMP_LAYER_MODE_BURN, - - GIMP_LAYER_MODE_OVERLAY, - GIMP_LAYER_MODE_SOFTLIGHT, - GIMP_LAYER_MODE_HARDLIGHT, - GIMP_LAYER_MODE_VIVID_LIGHT, - GIMP_LAYER_MODE_PIN_LIGHT, - GIMP_LAYER_MODE_LINEAR_LIGHT, - GIMP_LAYER_MODE_HARD_MIX, - - GIMP_LAYER_MODE_DIFFERENCE, - GIMP_LAYER_MODE_SUBTRACT, - GIMP_LAYER_MODE_GRAIN_EXTRACT, - GIMP_LAYER_MODE_GRAIN_MERGE, - GIMP_LAYER_MODE_DIVIDE, - - GIMP_LAYER_MODE_LCH_HUE, - GIMP_LAYER_MODE_LCH_CHROMA, - GIMP_LAYER_MODE_LCH_COLOR, - GIMP_LAYER_MODE_LCH_LIGHTNESS, - - GIMP_LAYER_MODE_EXCLUSION, - GIMP_LAYER_MODE_LINEAR_BURN -}; - -static const GimpLayerMode layer_mode_group_linear[] = -{ - GIMP_LAYER_MODE_NORMAL_LINEAR, - GIMP_LAYER_MODE_DISSOLVE, - - GIMP_LAYER_MODE_LIGHTEN_ONLY, - GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, - GIMP_LAYER_MODE_SCREEN_LINEAR, - GIMP_LAYER_MODE_DODGE_LINEAR, - GIMP_LAYER_MODE_ADDITION_LINEAR, - - GIMP_LAYER_MODE_DARKEN_ONLY, - GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, - GIMP_LAYER_MODE_MULTIPLY_LINEAR, - GIMP_LAYER_MODE_BURN_LINEAR, - - GIMP_LAYER_MODE_OVERLAY_LINEAR, - GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, - GIMP_LAYER_MODE_HARDLIGHT_LINEAR, - GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, - GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, - GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, - GIMP_LAYER_MODE_HARD_MIX_LINEAR, - - GIMP_LAYER_MODE_DIFFERENCE_LINEAR, - GIMP_LAYER_MODE_SUBTRACT_LINEAR, - GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, - GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, - GIMP_LAYER_MODE_DIVIDE_LINEAR, - - GIMP_LAYER_MODE_EXCLUSION_LINEAR, - GIMP_LAYER_MODE_LINEAR_BURN_LINEAR -}; - -static const GimpLayerMode layer_mode_group_perceptual[] = -{ - GIMP_LAYER_MODE_NORMAL, - GIMP_LAYER_MODE_DISSOLVE, - - GIMP_LAYER_MODE_LIGHTEN_ONLY, - GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, - GIMP_LAYER_MODE_SCREEN, - GIMP_LAYER_MODE_DODGE, - GIMP_LAYER_MODE_ADDITION, - - GIMP_LAYER_MODE_DARKEN_ONLY, - GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, - GIMP_LAYER_MODE_MULTIPLY, - GIMP_LAYER_MODE_BURN, - - GIMP_LAYER_MODE_OVERLAY, - GIMP_LAYER_MODE_SOFTLIGHT, - GIMP_LAYER_MODE_HARDLIGHT, - GIMP_LAYER_MODE_VIVID_LIGHT, - GIMP_LAYER_MODE_PIN_LIGHT, - GIMP_LAYER_MODE_LINEAR_LIGHT, - GIMP_LAYER_MODE_HARD_MIX, - - GIMP_LAYER_MODE_DIFFERENCE, - GIMP_LAYER_MODE_SUBTRACT, - GIMP_LAYER_MODE_GRAIN_EXTRACT, - GIMP_LAYER_MODE_GRAIN_MERGE, - GIMP_LAYER_MODE_DIVIDE, - - GIMP_LAYER_MODE_HSV_HUE, - GIMP_LAYER_MODE_HSV_SATURATION, - GIMP_LAYER_MODE_HSV_COLOR, - GIMP_LAYER_MODE_HSV_VALUE, - - GIMP_LAYER_MODE_LCH_HUE, - GIMP_LAYER_MODE_LCH_CHROMA, - GIMP_LAYER_MODE_LCH_COLOR, - GIMP_LAYER_MODE_LCH_LIGHTNESS, - - GIMP_LAYER_MODE_EXCLUSION, - GIMP_LAYER_MODE_LINEAR_BURN -}; - -static const GimpLayerMode layer_mode_group_legacy[] = -{ - GIMP_LAYER_MODE_NORMAL, - GIMP_LAYER_MODE_DISSOLVE, - - GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY, - GIMP_LAYER_MODE_SCREEN_LEGACY, - GIMP_LAYER_MODE_DODGE_LEGACY, - GIMP_LAYER_MODE_ADDITION_LEGACY, - - GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY, - GIMP_LAYER_MODE_MULTIPLY_LEGACY, - GIMP_LAYER_MODE_BURN_LEGACY, - - GIMP_LAYER_MODE_SOFTLIGHT_LEGACY, - GIMP_LAYER_MODE_HARDLIGHT_LEGACY, - - GIMP_LAYER_MODE_DIFFERENCE_LEGACY, - GIMP_LAYER_MODE_SUBTRACT_LEGACY, - GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY, - GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY, - GIMP_LAYER_MODE_DIVIDE_LEGACY, - - GIMP_LAYER_MODE_HSV_HUE_LEGACY, - GIMP_LAYER_MODE_HSV_SATURATION_LEGACY, - GIMP_LAYER_MODE_HSV_COLOR_LEGACY, - GIMP_LAYER_MODE_HSV_VALUE_LEGACY -}; - -static const GimpLayerMode layer_mode_groups[][4] = -{ - { - GIMP_LAYER_MODE_NORMAL, - GIMP_LAYER_MODE_NORMAL_LINEAR, - GIMP_LAYER_MODE_NORMAL, - GIMP_LAYER_MODE_NORMAL - }, - - { - GIMP_LAYER_MODE_DISSOLVE, - GIMP_LAYER_MODE_DISSOLVE, - GIMP_LAYER_MODE_DISSOLVE, - GIMP_LAYER_MODE_DISSOLVE - }, - - { - GIMP_LAYER_MODE_BEHIND, - GIMP_LAYER_MODE_BEHIND_LINEAR, - GIMP_LAYER_MODE_BEHIND, - GIMP_LAYER_MODE_BEHIND - }, - - { - GIMP_LAYER_MODE_MULTIPLY, - GIMP_LAYER_MODE_MULTIPLY_LINEAR, - GIMP_LAYER_MODE_MULTIPLY, - GIMP_LAYER_MODE_MULTIPLY_LEGACY - }, - - { - GIMP_LAYER_MODE_SCREEN, - GIMP_LAYER_MODE_SCREEN_LINEAR, - GIMP_LAYER_MODE_SCREEN, - GIMP_LAYER_MODE_SCREEN_LEGACY - }, - - { - GIMP_LAYER_MODE_OVERLAY, - GIMP_LAYER_MODE_OVERLAY_LINEAR, - GIMP_LAYER_MODE_OVERLAY, - -1 - }, - - { - GIMP_LAYER_MODE_DIFFERENCE, - GIMP_LAYER_MODE_DIFFERENCE_LINEAR, - GIMP_LAYER_MODE_DIFFERENCE, - GIMP_LAYER_MODE_DIFFERENCE_LEGACY - }, - - { - GIMP_LAYER_MODE_ADDITION, - GIMP_LAYER_MODE_ADDITION_LINEAR, - GIMP_LAYER_MODE_ADDITION, - GIMP_LAYER_MODE_ADDITION_LEGACY - }, - - { - GIMP_LAYER_MODE_SUBTRACT, - GIMP_LAYER_MODE_SUBTRACT_LINEAR, - GIMP_LAYER_MODE_SUBTRACT, - GIMP_LAYER_MODE_SUBTRACT_LEGACY - }, - - { - GIMP_LAYER_MODE_DARKEN_ONLY, - GIMP_LAYER_MODE_DARKEN_ONLY, - GIMP_LAYER_MODE_DARKEN_ONLY, - GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY - }, - - { - GIMP_LAYER_MODE_LIGHTEN_ONLY, - GIMP_LAYER_MODE_LIGHTEN_ONLY, - GIMP_LAYER_MODE_LIGHTEN_ONLY, - GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY - }, - - { - -1, - -1, - GIMP_LAYER_MODE_HSV_HUE, - GIMP_LAYER_MODE_HSV_HUE_LEGACY - }, - - { - -1, - -1, - GIMP_LAYER_MODE_HSV_SATURATION, - GIMP_LAYER_MODE_HSV_SATURATION_LEGACY - }, - - { - -1, - -1, - GIMP_LAYER_MODE_HSV_COLOR, - GIMP_LAYER_MODE_HSV_COLOR_LEGACY - }, - - { - -1, - -1, - GIMP_LAYER_MODE_HSV_VALUE, - GIMP_LAYER_MODE_HSV_VALUE_LEGACY - }, - - { - GIMP_LAYER_MODE_DIVIDE, - GIMP_LAYER_MODE_DIVIDE_LINEAR, - GIMP_LAYER_MODE_DIVIDE, - GIMP_LAYER_MODE_DIVIDE_LEGACY - }, - - { - GIMP_LAYER_MODE_DODGE, - GIMP_LAYER_MODE_DODGE_LINEAR, - GIMP_LAYER_MODE_DODGE, - GIMP_LAYER_MODE_DODGE_LEGACY - }, - - { - GIMP_LAYER_MODE_BURN, - GIMP_LAYER_MODE_BURN_LINEAR, - GIMP_LAYER_MODE_BURN, - GIMP_LAYER_MODE_BURN_LEGACY - }, - - { - GIMP_LAYER_MODE_HARDLIGHT, - GIMP_LAYER_MODE_HARDLIGHT_LINEAR, - GIMP_LAYER_MODE_HARDLIGHT, - GIMP_LAYER_MODE_HARDLIGHT_LEGACY - }, - - { - GIMP_LAYER_MODE_SOFTLIGHT, - GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, - GIMP_LAYER_MODE_SOFTLIGHT, - GIMP_LAYER_MODE_SOFTLIGHT_LEGACY - }, - - { - GIMP_LAYER_MODE_GRAIN_EXTRACT, - GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, - GIMP_LAYER_MODE_GRAIN_EXTRACT, - GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY - }, - - { - GIMP_LAYER_MODE_GRAIN_MERGE, - GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, - GIMP_LAYER_MODE_GRAIN_MERGE, - GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY - }, - - { - GIMP_LAYER_MODE_COLOR_ERASE, - -1, - GIMP_LAYER_MODE_COLOR_ERASE, - -1, - }, - - { - GIMP_LAYER_MODE_VIVID_LIGHT, - GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, - GIMP_LAYER_MODE_VIVID_LIGHT, - -1 - }, - - { - GIMP_LAYER_MODE_PIN_LIGHT, - GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, - GIMP_LAYER_MODE_PIN_LIGHT, - -1 - }, - - { - GIMP_LAYER_MODE_LINEAR_LIGHT, - GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, - GIMP_LAYER_MODE_LINEAR_LIGHT, - -1 - }, - - { - GIMP_LAYER_MODE_HARD_MIX, - GIMP_LAYER_MODE_HARD_MIX_LINEAR, - GIMP_LAYER_MODE_HARD_MIX, - -1 - }, - - { - GIMP_LAYER_MODE_EXCLUSION, - GIMP_LAYER_MODE_EXCLUSION_LINEAR, - GIMP_LAYER_MODE_EXCLUSION, - -1 - }, - - { - GIMP_LAYER_MODE_LINEAR_BURN, - GIMP_LAYER_MODE_LINEAR_BURN_LINEAR, - GIMP_LAYER_MODE_LINEAR_BURN, - -1 - }, - - { - GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, - GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, - GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, - -1 - }, - - { - GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, - GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, - GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, - -1 - }, - - { - GIMP_LAYER_MODE_ERASE, - GIMP_LAYER_MODE_ERASE, - -1, - -1 - }, - - { - GIMP_LAYER_MODE_REPLACE, - GIMP_LAYER_MODE_REPLACE, - -1, - -1 - }, - - { - GIMP_LAYER_MODE_ANTI_ERASE, - GIMP_LAYER_MODE_ANTI_ERASE, - -1, - -1 - }, -}; - - -/* public functions */ - -gboolean -gimp_layer_mode_is_legacy (GimpLayerMode mode) -{ - const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); - if (!info) - return FALSE; - return (info->flags & GIMP_LAYER_MODE_FLAG_LEGACY) != 0; -} - -gboolean -gimp_layer_mode_wants_linear_data (GimpLayerMode mode) -{ - const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); - if (!info) - return FALSE; - return (info->flags & GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA) != 0; -} - -GimpLayerColorSpace -gimp_layer_mode_get_blend_space (GimpLayerMode mode) -{ - const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); - if (!info) - return GIMP_LAYER_COLOR_SPACE_RGB_LINEAR; - return info->blend_space; -} - -GimpLayerColorSpace -gimp_layer_mode_get_composite_space (GimpLayerMode mode) -{ - const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); - if (!info) - return GIMP_LAYER_COLOR_SPACE_RGB_LINEAR; - return info->composite_space; -} - -GimpLayerCompositeMode -gimp_layer_mode_get_composite_mode (GimpLayerMode mode) -{ - const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); - if (!info) - return GIMP_LAYER_COMPOSITE_SRC_OVER; - return info->composite_mode; -} - -const gchar * -gimp_layer_mode_get_operation (GimpLayerMode mode) -{ - const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); - if (!info) - return "gimp:layer-mode"; - return info->op_name; -} - -static gboolean -is_mode_in_array (const GimpLayerMode *modes, - gint n_modes, - GimpLayerMode mode) -{ - gint i; - - for (i = 0; i < n_modes; i++) - if (modes[i] == mode) - return TRUE; - - return FALSE; -} - -GimpLayerModeGroup -gimp_layer_mode_get_group (GimpLayerMode mode) -{ - if (is_mode_in_array (layer_mode_group_default, - G_N_ELEMENTS (layer_mode_group_default), mode)) - { - return GIMP_LAYER_MODE_GROUP_DEFAULT; - } - else if (is_mode_in_array (layer_mode_group_linear, - G_N_ELEMENTS (layer_mode_group_linear), mode)) - { - return GIMP_LAYER_MODE_GROUP_LINEAR; - } - else if (is_mode_in_array (layer_mode_group_perceptual, - G_N_ELEMENTS (layer_mode_group_perceptual), mode)) - { - return GIMP_LAYER_MODE_GROUP_PERCEPTUAL; - } - else if (is_mode_in_array (layer_mode_group_legacy, - G_N_ELEMENTS (layer_mode_group_legacy), mode)) - { - return GIMP_LAYER_MODE_GROUP_LEGACY; - } - - return GIMP_LAYER_MODE_GROUP_DEFAULT; -} - -const GimpLayerMode * -gimp_layer_mode_get_group_array (GimpLayerModeGroup group, - gint *n_modes) -{ - g_return_val_if_fail (n_modes != NULL, NULL); - - switch (group) - { - case GIMP_LAYER_MODE_GROUP_DEFAULT: - *n_modes = G_N_ELEMENTS (layer_mode_group_default); - return layer_mode_group_default; - - case GIMP_LAYER_MODE_GROUP_LINEAR: - *n_modes = G_N_ELEMENTS (layer_mode_group_linear); - return layer_mode_group_linear; - - case GIMP_LAYER_MODE_GROUP_PERCEPTUAL: - *n_modes = G_N_ELEMENTS (layer_mode_group_perceptual); - return layer_mode_group_perceptual; - - case GIMP_LAYER_MODE_GROUP_LEGACY: - *n_modes = G_N_ELEMENTS (layer_mode_group_legacy); - return layer_mode_group_legacy; - - default: - g_return_val_if_reached (NULL); - } -} - -gboolean -gimp_layer_mode_get_for_group (GimpLayerMode old_mode, - GimpLayerModeGroup new_group, - GimpLayerMode *new_mode) -{ - gint i; - - g_return_val_if_fail (new_mode != NULL, FALSE); - - for (i = 0; i < G_N_ELEMENTS (layer_mode_groups); i++) - { - if (is_mode_in_array (layer_mode_groups[i], 4, old_mode)) - { - *new_mode = layer_mode_groups[i][new_group]; - - if (*new_mode != -1) - return TRUE; - - return FALSE; - } - } - - *new_mode = -1; - - return FALSE; -} diff --git a/app/gegl/gimp-gegl-nodes.c b/app/gegl/gimp-gegl-nodes.c index 548ed80743..86fa66fe95 100644 --- a/app/gegl/gimp-gegl-nodes.c +++ b/app/gegl/gimp-gegl-nodes.c @@ -24,7 +24,7 @@ #include "gimp-gegl-types.h" -#include "core/gimp-layer-modes.h" +#include "operations/layer-modes/gimp-layer-modes.h" #include "gimp-gegl-nodes.h" #include "gimp-gegl-utils.h" diff --git a/app/operations/gimp-operations.c b/app/operations/gimp-operations.c index fc26091c89..9f4002160f 100644 --- a/app/operations/gimp-operations.c +++ b/app/operations/gimp-operations.c @@ -84,6 +84,7 @@ #include "layer-modes-legacy/gimpoperationsoftlightlegacy.h" #include "layer-modes-legacy/gimpoperationsubtractlegacy.h" +#include "layer-modes/gimp-layer-modes.h" #include "layer-modes/gimpoperationantierase.h" #include "layer-modes/gimpoperationbehind.h" #include "layer-modes/gimpoperationerase.h" @@ -96,6 +97,8 @@ void gimp_operations_init (void) { + gimp_layer_modes_init (); + g_type_class_ref (GIMP_TYPE_OPERATION_BLEND); g_type_class_ref (GIMP_TYPE_OPERATION_BORDER); g_type_class_ref (GIMP_TYPE_OPERATION_CAGE_COEF_CALC); diff --git a/app/operations/layer-modes/Makefile.am b/app/operations/layer-modes/Makefile.am index 2764580682..59d41171ac 100644 --- a/app/operations/layer-modes/Makefile.am +++ b/app/operations/layer-modes/Makefile.am @@ -19,6 +19,8 @@ noinst_LIBRARIES = \ libapplayermodes.a libapplayermodes_generic_a_sources = \ + gimp-layer-modes.c \ + gimp-layer-modes.h \ gimpoperationlayermode.c \ gimpoperationlayermode.h \ gimplayermodefunctions.c \ diff --git a/app/operations/layer-modes/gimp-layer-modes.c b/app/operations/layer-modes/gimp-layer-modes.c new file mode 100644 index 0000000000..2ae01c7876 --- /dev/null +++ b/app/operations/layer-modes/gimp-layer-modes.c @@ -0,0 +1,1175 @@ +/* GIMP - The GNU Image Manipulation Program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * gimp-layer-modes.c + * Copyright (C) 2017 Michael Natterer + * Øyvind Kolås + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "config.h" + +#include + +#include "../operations-types.h" + +#include "gimp-layer-modes.h" + + +/* static variables */ + +static GimpLayerModeInfo layer_mode_infos[]= +{ + { GIMP_LAYER_MODE_NORMAL, + "gimp:normal", + 0, + GIMP_LAYER_COMPOSITE_SRC_OVER, + }, + + { GIMP_LAYER_MODE_DISSOLVE, + "gimp:dissolve", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_OVER, + }, + + { GIMP_LAYER_MODE_BEHIND, + "gimp:behind", + 0, + GIMP_LAYER_COMPOSITE_DST_ATOP, + }, + + { GIMP_LAYER_MODE_MULTIPLY_LEGACY, + "gimp:multiply-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_SCREEN_LEGACY, + "gimp:screen-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_OVERLAY_LEGACY, + "gimp:overlay-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_DIFFERENCE_LEGACY, + "gimp:difference-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_ADDITION_LEGACY, + "gimp:addition-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_SUBTRACT_LEGACY, + "gimp:subtract-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY, + "gimp:darken-only-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY, + "gimp:lighten-only-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_HSV_HUE_LEGACY, + "gimp:hsv-hue-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_HSV_SATURATION_LEGACY, + "gimp:hsv-saturation-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_HSV_COLOR_LEGACY, + "gimp:hsv-color-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_HSV_VALUE_LEGACY, + "gimp:hsv-value-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_DIVIDE_LEGACY, + "gimp:divide-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_DODGE_LEGACY, + "gimp:dodge-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_BURN_LEGACY, + "gimp:burn-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_HARDLIGHT_LEGACY, + "gimp:hardlight-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_SOFTLIGHT_LEGACY, + "gimp:softlight-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY, + "gimp:grain-extract-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY, + "gimp:grain-merge-legacy", + GIMP_LAYER_MODE_FLAG_LEGACY, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_COLOR_ERASE, + "gimp:color-erase", + 0, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + }, + + { GIMP_LAYER_MODE_OVERLAY, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_LCH_HUE, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_LAB + }, + + { GIMP_LAYER_MODE_LCH_CHROMA, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_LAB + }, + + { GIMP_LAYER_MODE_LCH_COLOR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_LAB + }, + + { GIMP_LAYER_MODE_LCH_LIGHTNESS, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_LAB + }, + + { GIMP_LAYER_MODE_NORMAL_LINEAR, + "gimp:normal", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + }, + + { GIMP_LAYER_MODE_BEHIND_LINEAR, + "gimp:behind", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + }, + + { GIMP_LAYER_MODE_MULTIPLY, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_MULTIPLY_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_SCREEN, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_SCREEN_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_OVERLAY_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_DIFFERENCE, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_DIFFERENCE_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_ADDITION, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_ADDITION_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_SUBTRACT, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_SUBTRACT_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_DARKEN_ONLY, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_LIGHTEN_ONLY, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_HSV_HUE, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_HSV_SATURATION, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_HSV_COLOR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_HSV_VALUE, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_DIVIDE, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_DIVIDE_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_DODGE, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_DODGE_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_BURN, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_BURN_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_HARDLIGHT, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_HARDLIGHT_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_SOFTLIGHT, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_GRAIN_EXTRACT, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_GRAIN_MERGE, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_VIVID_LIGHT, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_PIN_LIGHT, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_LINEAR_LIGHT, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_HARD_MIX, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_HARD_MIX_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_EXCLUSION, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_EXCLUSION_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_LINEAR_BURN, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_LINEAR_BURN_LINEAR, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL + }, + + { GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, + "gimp:layer-mode", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, + GIMP_LAYER_COLOR_SPACE_RGB_LINEAR + }, + + { GIMP_LAYER_MODE_ERASE, + "gimp:erase", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + GIMP_LAYER_COMPOSITE_SRC_ATOP + }, + + { GIMP_LAYER_MODE_REPLACE, + "gimp:replace", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + }, + + { GIMP_LAYER_MODE_ANTI_ERASE, + "gimp:anti-erase", + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, + } +}; + +static const GimpLayerMode layer_mode_group_default[] = +{ + GIMP_LAYER_MODE_NORMAL, + GIMP_LAYER_MODE_DISSOLVE, + + GIMP_LAYER_MODE_LIGHTEN_ONLY, + GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, + GIMP_LAYER_MODE_SCREEN, + GIMP_LAYER_MODE_DODGE, + GIMP_LAYER_MODE_ADDITION, + + GIMP_LAYER_MODE_DARKEN_ONLY, + GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, + GIMP_LAYER_MODE_MULTIPLY, + GIMP_LAYER_MODE_BURN, + + GIMP_LAYER_MODE_OVERLAY, + GIMP_LAYER_MODE_SOFTLIGHT, + GIMP_LAYER_MODE_HARDLIGHT, + GIMP_LAYER_MODE_VIVID_LIGHT, + GIMP_LAYER_MODE_PIN_LIGHT, + GIMP_LAYER_MODE_LINEAR_LIGHT, + GIMP_LAYER_MODE_HARD_MIX, + + GIMP_LAYER_MODE_DIFFERENCE, + GIMP_LAYER_MODE_SUBTRACT, + GIMP_LAYER_MODE_GRAIN_EXTRACT, + GIMP_LAYER_MODE_GRAIN_MERGE, + GIMP_LAYER_MODE_DIVIDE, + + GIMP_LAYER_MODE_LCH_HUE, + GIMP_LAYER_MODE_LCH_CHROMA, + GIMP_LAYER_MODE_LCH_COLOR, + GIMP_LAYER_MODE_LCH_LIGHTNESS, + + GIMP_LAYER_MODE_EXCLUSION, + GIMP_LAYER_MODE_LINEAR_BURN +}; + +static const GimpLayerMode layer_mode_group_linear[] = +{ + GIMP_LAYER_MODE_NORMAL_LINEAR, + GIMP_LAYER_MODE_DISSOLVE, + + GIMP_LAYER_MODE_LIGHTEN_ONLY, + GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, + GIMP_LAYER_MODE_SCREEN_LINEAR, + GIMP_LAYER_MODE_DODGE_LINEAR, + GIMP_LAYER_MODE_ADDITION_LINEAR, + + GIMP_LAYER_MODE_DARKEN_ONLY, + GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, + GIMP_LAYER_MODE_MULTIPLY_LINEAR, + GIMP_LAYER_MODE_BURN_LINEAR, + + GIMP_LAYER_MODE_OVERLAY_LINEAR, + GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, + GIMP_LAYER_MODE_HARDLIGHT_LINEAR, + GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, + GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, + GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, + GIMP_LAYER_MODE_HARD_MIX_LINEAR, + + GIMP_LAYER_MODE_DIFFERENCE_LINEAR, + GIMP_LAYER_MODE_SUBTRACT_LINEAR, + GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, + GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, + GIMP_LAYER_MODE_DIVIDE_LINEAR, + + GIMP_LAYER_MODE_EXCLUSION_LINEAR, + GIMP_LAYER_MODE_LINEAR_BURN_LINEAR +}; + +static const GimpLayerMode layer_mode_group_perceptual[] = +{ + GIMP_LAYER_MODE_NORMAL, + GIMP_LAYER_MODE_DISSOLVE, + + GIMP_LAYER_MODE_LIGHTEN_ONLY, + GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, + GIMP_LAYER_MODE_SCREEN, + GIMP_LAYER_MODE_DODGE, + GIMP_LAYER_MODE_ADDITION, + + GIMP_LAYER_MODE_DARKEN_ONLY, + GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, + GIMP_LAYER_MODE_MULTIPLY, + GIMP_LAYER_MODE_BURN, + + GIMP_LAYER_MODE_OVERLAY, + GIMP_LAYER_MODE_SOFTLIGHT, + GIMP_LAYER_MODE_HARDLIGHT, + GIMP_LAYER_MODE_VIVID_LIGHT, + GIMP_LAYER_MODE_PIN_LIGHT, + GIMP_LAYER_MODE_LINEAR_LIGHT, + GIMP_LAYER_MODE_HARD_MIX, + + GIMP_LAYER_MODE_DIFFERENCE, + GIMP_LAYER_MODE_SUBTRACT, + GIMP_LAYER_MODE_GRAIN_EXTRACT, + GIMP_LAYER_MODE_GRAIN_MERGE, + GIMP_LAYER_MODE_DIVIDE, + + GIMP_LAYER_MODE_HSV_HUE, + GIMP_LAYER_MODE_HSV_SATURATION, + GIMP_LAYER_MODE_HSV_COLOR, + GIMP_LAYER_MODE_HSV_VALUE, + + GIMP_LAYER_MODE_LCH_HUE, + GIMP_LAYER_MODE_LCH_CHROMA, + GIMP_LAYER_MODE_LCH_COLOR, + GIMP_LAYER_MODE_LCH_LIGHTNESS, + + GIMP_LAYER_MODE_EXCLUSION, + GIMP_LAYER_MODE_LINEAR_BURN +}; + +static const GimpLayerMode layer_mode_group_legacy[] = +{ + GIMP_LAYER_MODE_NORMAL, + GIMP_LAYER_MODE_DISSOLVE, + + GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY, + GIMP_LAYER_MODE_SCREEN_LEGACY, + GIMP_LAYER_MODE_DODGE_LEGACY, + GIMP_LAYER_MODE_ADDITION_LEGACY, + + GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY, + GIMP_LAYER_MODE_MULTIPLY_LEGACY, + GIMP_LAYER_MODE_BURN_LEGACY, + + GIMP_LAYER_MODE_SOFTLIGHT_LEGACY, + GIMP_LAYER_MODE_HARDLIGHT_LEGACY, + + GIMP_LAYER_MODE_DIFFERENCE_LEGACY, + GIMP_LAYER_MODE_SUBTRACT_LEGACY, + GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY, + GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY, + GIMP_LAYER_MODE_DIVIDE_LEGACY, + + GIMP_LAYER_MODE_HSV_HUE_LEGACY, + GIMP_LAYER_MODE_HSV_SATURATION_LEGACY, + GIMP_LAYER_MODE_HSV_COLOR_LEGACY, + GIMP_LAYER_MODE_HSV_VALUE_LEGACY +}; + +static const GimpLayerMode layer_mode_groups[][4] = +{ + { + GIMP_LAYER_MODE_NORMAL, + GIMP_LAYER_MODE_NORMAL_LINEAR, + GIMP_LAYER_MODE_NORMAL, + GIMP_LAYER_MODE_NORMAL + }, + + { + GIMP_LAYER_MODE_DISSOLVE, + GIMP_LAYER_MODE_DISSOLVE, + GIMP_LAYER_MODE_DISSOLVE, + GIMP_LAYER_MODE_DISSOLVE + }, + + { + GIMP_LAYER_MODE_BEHIND, + GIMP_LAYER_MODE_BEHIND_LINEAR, + GIMP_LAYER_MODE_BEHIND, + GIMP_LAYER_MODE_BEHIND + }, + + { + GIMP_LAYER_MODE_MULTIPLY, + GIMP_LAYER_MODE_MULTIPLY_LINEAR, + GIMP_LAYER_MODE_MULTIPLY, + GIMP_LAYER_MODE_MULTIPLY_LEGACY + }, + + { + GIMP_LAYER_MODE_SCREEN, + GIMP_LAYER_MODE_SCREEN_LINEAR, + GIMP_LAYER_MODE_SCREEN, + GIMP_LAYER_MODE_SCREEN_LEGACY + }, + + { + GIMP_LAYER_MODE_OVERLAY, + GIMP_LAYER_MODE_OVERLAY_LINEAR, + GIMP_LAYER_MODE_OVERLAY, + -1 + }, + + { + GIMP_LAYER_MODE_DIFFERENCE, + GIMP_LAYER_MODE_DIFFERENCE_LINEAR, + GIMP_LAYER_MODE_DIFFERENCE, + GIMP_LAYER_MODE_DIFFERENCE_LEGACY + }, + + { + GIMP_LAYER_MODE_ADDITION, + GIMP_LAYER_MODE_ADDITION_LINEAR, + GIMP_LAYER_MODE_ADDITION, + GIMP_LAYER_MODE_ADDITION_LEGACY + }, + + { + GIMP_LAYER_MODE_SUBTRACT, + GIMP_LAYER_MODE_SUBTRACT_LINEAR, + GIMP_LAYER_MODE_SUBTRACT, + GIMP_LAYER_MODE_SUBTRACT_LEGACY + }, + + { + GIMP_LAYER_MODE_DARKEN_ONLY, + GIMP_LAYER_MODE_DARKEN_ONLY, + GIMP_LAYER_MODE_DARKEN_ONLY, + GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY + }, + + { + GIMP_LAYER_MODE_LIGHTEN_ONLY, + GIMP_LAYER_MODE_LIGHTEN_ONLY, + GIMP_LAYER_MODE_LIGHTEN_ONLY, + GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY + }, + + { + -1, + -1, + GIMP_LAYER_MODE_HSV_HUE, + GIMP_LAYER_MODE_HSV_HUE_LEGACY + }, + + { + -1, + -1, + GIMP_LAYER_MODE_HSV_SATURATION, + GIMP_LAYER_MODE_HSV_SATURATION_LEGACY + }, + + { + -1, + -1, + GIMP_LAYER_MODE_HSV_COLOR, + GIMP_LAYER_MODE_HSV_COLOR_LEGACY + }, + + { + -1, + -1, + GIMP_LAYER_MODE_HSV_VALUE, + GIMP_LAYER_MODE_HSV_VALUE_LEGACY + }, + + { + GIMP_LAYER_MODE_DIVIDE, + GIMP_LAYER_MODE_DIVIDE_LINEAR, + GIMP_LAYER_MODE_DIVIDE, + GIMP_LAYER_MODE_DIVIDE_LEGACY + }, + + { + GIMP_LAYER_MODE_DODGE, + GIMP_LAYER_MODE_DODGE_LINEAR, + GIMP_LAYER_MODE_DODGE, + GIMP_LAYER_MODE_DODGE_LEGACY + }, + + { + GIMP_LAYER_MODE_BURN, + GIMP_LAYER_MODE_BURN_LINEAR, + GIMP_LAYER_MODE_BURN, + GIMP_LAYER_MODE_BURN_LEGACY + }, + + { + GIMP_LAYER_MODE_HARDLIGHT, + GIMP_LAYER_MODE_HARDLIGHT_LINEAR, + GIMP_LAYER_MODE_HARDLIGHT, + GIMP_LAYER_MODE_HARDLIGHT_LEGACY + }, + + { + GIMP_LAYER_MODE_SOFTLIGHT, + GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, + GIMP_LAYER_MODE_SOFTLIGHT, + GIMP_LAYER_MODE_SOFTLIGHT_LEGACY + }, + + { + GIMP_LAYER_MODE_GRAIN_EXTRACT, + GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, + GIMP_LAYER_MODE_GRAIN_EXTRACT, + GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY + }, + + { + GIMP_LAYER_MODE_GRAIN_MERGE, + GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, + GIMP_LAYER_MODE_GRAIN_MERGE, + GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY + }, + + { + GIMP_LAYER_MODE_COLOR_ERASE, + -1, + GIMP_LAYER_MODE_COLOR_ERASE, + -1, + }, + + { + GIMP_LAYER_MODE_VIVID_LIGHT, + GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, + GIMP_LAYER_MODE_VIVID_LIGHT, + -1 + }, + + { + GIMP_LAYER_MODE_PIN_LIGHT, + GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, + GIMP_LAYER_MODE_PIN_LIGHT, + -1 + }, + + { + GIMP_LAYER_MODE_LINEAR_LIGHT, + GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, + GIMP_LAYER_MODE_LINEAR_LIGHT, + -1 + }, + + { + GIMP_LAYER_MODE_HARD_MIX, + GIMP_LAYER_MODE_HARD_MIX_LINEAR, + GIMP_LAYER_MODE_HARD_MIX, + -1 + }, + + { + GIMP_LAYER_MODE_EXCLUSION, + GIMP_LAYER_MODE_EXCLUSION_LINEAR, + GIMP_LAYER_MODE_EXCLUSION, + -1 + }, + + { + GIMP_LAYER_MODE_LINEAR_BURN, + GIMP_LAYER_MODE_LINEAR_BURN_LINEAR, + GIMP_LAYER_MODE_LINEAR_BURN, + -1 + }, + + { + GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, + GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, + GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, + -1 + }, + + { + GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, + GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, + GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, + -1 + }, + + { + GIMP_LAYER_MODE_ERASE, + GIMP_LAYER_MODE_ERASE, + -1, + -1 + }, + + { + GIMP_LAYER_MODE_REPLACE, + GIMP_LAYER_MODE_REPLACE, + -1, + -1 + }, + + { + GIMP_LAYER_MODE_ANTI_ERASE, + GIMP_LAYER_MODE_ANTI_ERASE, + -1, + -1 + }, +}; + + +/* public functions */ + +void +gimp_layer_modes_init (void) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (layer_mode_infos); i++) + { + g_assert ((GimpLayerMode) i == layer_mode_infos[i].layer_mode); + } +} + +const GimpLayerModeInfo * +gimp_layer_mode_info (GimpLayerMode mode) +{ + g_return_val_if_fail (mode < G_N_ELEMENTS (layer_mode_infos), + &layer_mode_infos[0]); + + return &layer_mode_infos[mode]; +} + +gboolean +gimp_layer_mode_is_legacy (GimpLayerMode mode) +{ + const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); + if (!info) + return FALSE; + return (info->flags & GIMP_LAYER_MODE_FLAG_LEGACY) != 0; +} + +gboolean +gimp_layer_mode_wants_linear_data (GimpLayerMode mode) +{ + const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); + if (!info) + return FALSE; + return (info->flags & GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA) != 0; +} + +GimpLayerColorSpace +gimp_layer_mode_get_blend_space (GimpLayerMode mode) +{ + const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); + if (!info) + return GIMP_LAYER_COLOR_SPACE_RGB_LINEAR; + return info->blend_space; +} + +GimpLayerColorSpace +gimp_layer_mode_get_composite_space (GimpLayerMode mode) +{ + const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); + if (!info) + return GIMP_LAYER_COLOR_SPACE_RGB_LINEAR; + return info->composite_space; +} + +GimpLayerCompositeMode +gimp_layer_mode_get_composite_mode (GimpLayerMode mode) +{ + const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); + if (!info) + return GIMP_LAYER_COMPOSITE_SRC_OVER; + return info->composite_mode; +} + +const gchar * +gimp_layer_mode_get_operation (GimpLayerMode mode) +{ + const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); + if (!info) + return "gimp:layer-mode"; + return info->op_name; +} + +static gboolean +is_mode_in_array (const GimpLayerMode *modes, + gint n_modes, + GimpLayerMode mode) +{ + gint i; + + for (i = 0; i < n_modes; i++) + if (modes[i] == mode) + return TRUE; + + return FALSE; +} + +GimpLayerModeGroup +gimp_layer_mode_get_group (GimpLayerMode mode) +{ + if (is_mode_in_array (layer_mode_group_default, + G_N_ELEMENTS (layer_mode_group_default), mode)) + { + return GIMP_LAYER_MODE_GROUP_DEFAULT; + } + else if (is_mode_in_array (layer_mode_group_linear, + G_N_ELEMENTS (layer_mode_group_linear), mode)) + { + return GIMP_LAYER_MODE_GROUP_LINEAR; + } + else if (is_mode_in_array (layer_mode_group_perceptual, + G_N_ELEMENTS (layer_mode_group_perceptual), mode)) + { + return GIMP_LAYER_MODE_GROUP_PERCEPTUAL; + } + else if (is_mode_in_array (layer_mode_group_legacy, + G_N_ELEMENTS (layer_mode_group_legacy), mode)) + { + return GIMP_LAYER_MODE_GROUP_LEGACY; + } + + return GIMP_LAYER_MODE_GROUP_DEFAULT; +} + +const GimpLayerMode * +gimp_layer_mode_get_group_array (GimpLayerModeGroup group, + gint *n_modes) +{ + g_return_val_if_fail (n_modes != NULL, NULL); + + switch (group) + { + case GIMP_LAYER_MODE_GROUP_DEFAULT: + *n_modes = G_N_ELEMENTS (layer_mode_group_default); + return layer_mode_group_default; + + case GIMP_LAYER_MODE_GROUP_LINEAR: + *n_modes = G_N_ELEMENTS (layer_mode_group_linear); + return layer_mode_group_linear; + + case GIMP_LAYER_MODE_GROUP_PERCEPTUAL: + *n_modes = G_N_ELEMENTS (layer_mode_group_perceptual); + return layer_mode_group_perceptual; + + case GIMP_LAYER_MODE_GROUP_LEGACY: + *n_modes = G_N_ELEMENTS (layer_mode_group_legacy); + return layer_mode_group_legacy; + + default: + g_return_val_if_reached (NULL); + } +} + +gboolean +gimp_layer_mode_get_for_group (GimpLayerMode old_mode, + GimpLayerModeGroup new_group, + GimpLayerMode *new_mode) +{ + gint i; + + g_return_val_if_fail (new_mode != NULL, FALSE); + + for (i = 0; i < G_N_ELEMENTS (layer_mode_groups); i++) + { + if (is_mode_in_array (layer_mode_groups[i], 4, old_mode)) + { + *new_mode = layer_mode_groups[i][new_group]; + + if (*new_mode != -1) + return TRUE; + + return FALSE; + } + } + + *new_mode = -1; + + return FALSE; +} diff --git a/app/core/gimp-layer-modes.h b/app/operations/layer-modes/gimp-layer-modes.h similarity index 81% rename from app/core/gimp-layer-modes.h rename to app/operations/layer-modes/gimp-layer-modes.h index dbd04df0f6..fb3df8c9a5 100644 --- a/app/core/gimp-layer-modes.h +++ b/app/operations/layer-modes/gimp-layer-modes.h @@ -23,6 +23,23 @@ #define __GIMP_LAYER_MODES_H__ +typedef struct _GimpLayerModeInfo GimpLayerModeInfo; + +struct _GimpLayerModeInfo +{ + GimpLayerMode layer_mode; + gchar *op_name; + GimpLayerModeFlags flags; + GimpLayerCompositeMode composite_mode; + GimpLayerColorSpace composite_space; + GimpLayerColorSpace blend_space; +}; + + +void gimp_layer_modes_init (void); + +const GimpLayerModeInfo *gimp_layer_mode_info (GimpLayerMode mode); + gboolean gimp_layer_mode_is_legacy (GimpLayerMode mode); gboolean gimp_layer_mode_wants_linear_data (GimpLayerMode mode); diff --git a/app/operations/layer-modes/gimpoperationlayermode.c b/app/operations/layer-modes/gimpoperationlayermode.c index b899a2d9d0..20de3605ea 100644 --- a/app/operations/layer-modes/gimpoperationlayermode.c +++ b/app/operations/layer-modes/gimpoperationlayermode.c @@ -1980,574 +1980,6 @@ static inline GimpBlendFunc gimp_layer_mode_get_blend_fun (GimpLayerMode mode) case GIMP_LAYER_MODE_ANTI_ERASE: return (void*)dummy_fun; } + return (void*)dummy_fun; } - -struct _GimpOperationLayerModeInfo -{ - GimpLayerMode layer_mode; - gchar *mode_name; - gchar *op_name; - GimpLayerModeFlags flags; - GimpLayerCompositeMode composite_mode; - GimpLayerColorSpace composite_space; - GimpLayerColorSpace blend_space; -}; - -static GimpLayerModeInfo gimp_layer_mode_infos[]= -{ - { GIMP_LAYER_MODE_NORMAL, - "gimp:normal", - 0, - GIMP_LAYER_COMPOSITE_SRC_OVER, - }, - { GIMP_LAYER_MODE_DISSOLVE, - "gimp:dissolve", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_OVER, - }, - { GIMP_LAYER_MODE_BEHIND, - "gimp:behind", - 0, - GIMP_LAYER_COMPOSITE_DST_ATOP, - }, - { GIMP_LAYER_MODE_MULTIPLY_LEGACY, - "gimp:multiply-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_SCREEN_LEGACY, - "gimp:screen-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_OVERLAY_LEGACY, - "gimp:overlay-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_DIFFERENCE_LEGACY, - "gimp:difference-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_ADDITION_LEGACY, - "gimp:addition-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_SUBTRACT_LEGACY, - "gimp:subtract-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY, - "gimp:darken-only-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY, - "gimp:lighten-only-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_HSV_HUE_LEGACY, - "gimp:hsv-hue-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_HSV_SATURATION_LEGACY, - "gimp:hsv-saturation-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_HSV_COLOR_LEGACY, - "gimp:hsv-color-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_HSV_VALUE_LEGACY, - "gimp:hsv-value-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_DIVIDE_LEGACY, - "gimp:divide-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_DODGE_LEGACY, - "gimp:dodge-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_BURN_LEGACY, - "gimp:burn-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_HARDLIGHT_LEGACY, - "gimp:hardlight-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_SOFTLIGHT_LEGACY, - "gimp:softlight-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY, - "gimp:grain-extract-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY, - "gimp:grain-merge-legacy", - GIMP_LAYER_MODE_FLAG_LEGACY, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_COLOR_ERASE, - "gimp:color-erase", - 0, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - }, - { GIMP_LAYER_MODE_OVERLAY, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_LCH_HUE, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_LAB - }, - { GIMP_LAYER_MODE_LCH_CHROMA, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_LAB - }, - { GIMP_LAYER_MODE_LCH_COLOR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_LAB - }, - { GIMP_LAYER_MODE_LCH_LIGHTNESS, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_LAB - }, - { GIMP_LAYER_MODE_NORMAL_LINEAR, - "gimp:normal", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - }, - { GIMP_LAYER_MODE_BEHIND_LINEAR, - "gimp:behind", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - }, - { GIMP_LAYER_MODE_MULTIPLY, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_MULTIPLY_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_SCREEN, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_SCREEN_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_OVERLAY_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_DIFFERENCE, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_DIFFERENCE_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_ADDITION, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_ADDITION_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_SUBTRACT, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_SUBTRACT_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_DARKEN_ONLY, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_LIGHTEN_ONLY, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_HSV_HUE, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_HSV_SATURATION, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_HSV_COLOR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_HSV_VALUE, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_DIVIDE, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_DIVIDE_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_DODGE, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_DODGE_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_BURN, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_BURN_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_HARDLIGHT, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_HARDLIGHT_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_SOFTLIGHT, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_GRAIN_EXTRACT, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_GRAIN_MERGE, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_VIVID_LIGHT, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_PIN_LIGHT, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_LINEAR_LIGHT, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_HARD_MIX, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_HARD_MIX_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_EXCLUSION, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_EXCLUSION_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_LINEAR_BURN, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_LINEAR_BURN_LINEAR, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - }, - { GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, - "gimp:layer-mode", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR, - GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - }, - { GIMP_LAYER_MODE_ERASE, - "gimp:erase", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - GIMP_LAYER_COMPOSITE_SRC_ATOP - }, - { GIMP_LAYER_MODE_REPLACE, - "gimp:replace", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - }, - { GIMP_LAYER_MODE_ANTI_ERASE, - "gimp:anti-erase", - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA, - }, -}; - -const GimpLayerModeInfo *gimp_layer_mode_info (GimpLayerMode mode) -{ - int i; - for (i = 0; i < sizeof (gimp_layer_mode_infos) / - sizeof (gimp_layer_mode_infos[0]); i++) - { - if (gimp_layer_mode_infos[i].layer_mode == mode) - return &gimp_layer_mode_infos[i]; - } - return NULL; -} - -#if 0 -/* the following is test code for verifying that the above data matches - the apis it takes over for - */ - -#include "core/gimp-layer-modes.h" - -void verify_layer_mode_info (void); -void verify_layer_mode_info (void) -{ - int i; - for (i = 0; i < sizeof (gimp_layer_mode_infos) / sizeof (gimp_layer_mode_infos[0]); i++) - { - GimpLayerModeInfo *info = &gimp_layer_mode_infos[i]; - printf ("%i - %s\n", i, info->op_name); - int mode = info->layer_mode; - if (info->layer_mode != i) - { - printf (" enum mismatch\n"); - } - if ((gimp_layer_mode_is_legacy (mode) != - ((info->flags & GIMP_LAYER_MODE_FLAG_LEGACY) != 0))) - printf (" legacy mismatch\n"); - if ((gimp_layer_mode_wants_linear_data (mode) != - ((info->flags & GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA) != 0))) - printf (" wants linear data mismatch\n"); - if (!strcmp (info->op_name, "gimp:layer-mode")) - { - if (gimp_layer_mode_get_blend_space (mode) != info->blend_space) - printf (" blend space mismatch\n"); - if (gimp_layer_mode_get_composite_space (mode) != info->composite_space) - printf (" composite space mismatch\n"); - if (gimp_layer_mode_get_composite_mode (mode) != info->composite_mode) - printf (" composite mode mismatch\n"); - if (strcmp (gimp_layer_mode_get_operation (mode), info->op_name)) - printf (" operation mismatch\n"); - } - } - exit(0); -} -#endif diff --git a/app/operations/layer-modes/gimpoperationlayermode.h b/app/operations/layer-modes/gimpoperationlayermode.h index 392aa30d2f..be6e684933 100644 --- a/app/operations/layer-modes/gimpoperationlayermode.h +++ b/app/operations/layer-modes/gimpoperationlayermode.h @@ -48,26 +48,6 @@ struct _GimpOperationLayerModeClass GimpLayerModeAffectMask (* get_affect_mask) (GimpOperationLayerMode *layer_mode); }; -typedef struct _GimpLayerModeInfo GimpLayerModeInfo; - -typedef enum GimpLayerModeFlags { - GIMP_LAYER_MODE_FLAG_LEGACY = (1<<0), - GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA = (1<<1) -} GimpLayerModeFlags; - - -struct _GimpLayerModeInfo -{ - GimpLayerMode layer_mode; - gchar *op_name; - GimpLayerModeFlags flags; - GimpLayerCompositeMode composite_mode; - GimpLayerColorSpace composite_space; - GimpLayerColorSpace blend_space; -}; - -const GimpLayerModeInfo *gimp_layer_mode_info (GimpLayerMode mode); - struct _GimpOperationLayerMode { diff --git a/app/operations/operations-enums.c b/app/operations/operations-enums.c index de7adcf1c1..e8ccc4b489 100644 --- a/app/operations/operations-enums.c +++ b/app/operations/operations-enums.c @@ -74,6 +74,224 @@ gimp_layer_composite_mode_get_type (void) return type; } +GType +gimp_layer_mode_get_type (void) +{ + static const GEnumValue values[] = + { + { GIMP_LAYER_MODE_NORMAL, "GIMP_LAYER_MODE_NORMAL", "normal" }, + { GIMP_LAYER_MODE_DISSOLVE, "GIMP_LAYER_MODE_DISSOLVE", "dissolve" }, + { GIMP_LAYER_MODE_BEHIND, "GIMP_LAYER_MODE_BEHIND", "behind" }, + { GIMP_LAYER_MODE_MULTIPLY_LEGACY, "GIMP_LAYER_MODE_MULTIPLY_LEGACY", "multiply-legacy" }, + { GIMP_LAYER_MODE_SCREEN_LEGACY, "GIMP_LAYER_MODE_SCREEN_LEGACY", "screen-legacy" }, + { GIMP_LAYER_MODE_OVERLAY_LEGACY, "GIMP_LAYER_MODE_OVERLAY_LEGACY", "overlay-legacy" }, + { GIMP_LAYER_MODE_DIFFERENCE_LEGACY, "GIMP_LAYER_MODE_DIFFERENCE_LEGACY", "difference-legacy" }, + { GIMP_LAYER_MODE_ADDITION_LEGACY, "GIMP_LAYER_MODE_ADDITION_LEGACY", "addition-legacy" }, + { GIMP_LAYER_MODE_SUBTRACT_LEGACY, "GIMP_LAYER_MODE_SUBTRACT_LEGACY", "subtract-legacy" }, + { GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY, "GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY", "darken-only-legacy" }, + { GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY, "GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY", "lighten-only-legacy" }, + { GIMP_LAYER_MODE_HSV_HUE_LEGACY, "GIMP_LAYER_MODE_HSV_HUE_LEGACY", "hsv-hue-legacy" }, + { GIMP_LAYER_MODE_HSV_SATURATION_LEGACY, "GIMP_LAYER_MODE_HSV_SATURATION_LEGACY", "hsv-saturation-legacy" }, + { GIMP_LAYER_MODE_HSV_COLOR_LEGACY, "GIMP_LAYER_MODE_HSV_COLOR_LEGACY", "hsv-color-legacy" }, + { GIMP_LAYER_MODE_HSV_VALUE_LEGACY, "GIMP_LAYER_MODE_HSV_VALUE_LEGACY", "hsv-value-legacy" }, + { GIMP_LAYER_MODE_DIVIDE_LEGACY, "GIMP_LAYER_MODE_DIVIDE_LEGACY", "divide-legacy" }, + { GIMP_LAYER_MODE_DODGE_LEGACY, "GIMP_LAYER_MODE_DODGE_LEGACY", "dodge-legacy" }, + { GIMP_LAYER_MODE_BURN_LEGACY, "GIMP_LAYER_MODE_BURN_LEGACY", "burn-legacy" }, + { GIMP_LAYER_MODE_HARDLIGHT_LEGACY, "GIMP_LAYER_MODE_HARDLIGHT_LEGACY", "hardlight-legacy" }, + { GIMP_LAYER_MODE_SOFTLIGHT_LEGACY, "GIMP_LAYER_MODE_SOFTLIGHT_LEGACY", "softlight-legacy" }, + { GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY, "GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY", "grain-extract-legacy" }, + { GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY, "GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY", "grain-merge-legacy" }, + { GIMP_LAYER_MODE_COLOR_ERASE, "GIMP_LAYER_MODE_COLOR_ERASE", "color-erase" }, + { GIMP_LAYER_MODE_OVERLAY, "GIMP_LAYER_MODE_OVERLAY", "overlay" }, + { GIMP_LAYER_MODE_LCH_HUE, "GIMP_LAYER_MODE_LCH_HUE", "lch-hue" }, + { GIMP_LAYER_MODE_LCH_CHROMA, "GIMP_LAYER_MODE_LCH_CHROMA", "lch-chroma" }, + { GIMP_LAYER_MODE_LCH_COLOR, "GIMP_LAYER_MODE_LCH_COLOR", "lch-color" }, + { GIMP_LAYER_MODE_LCH_LIGHTNESS, "GIMP_LAYER_MODE_LCH_LIGHTNESS", "lch-lightness" }, + { GIMP_LAYER_MODE_NORMAL_LINEAR, "GIMP_LAYER_MODE_NORMAL_LINEAR", "normal-linear" }, + { GIMP_LAYER_MODE_BEHIND_LINEAR, "GIMP_LAYER_MODE_BEHIND_LINEAR", "behind-linear" }, + { GIMP_LAYER_MODE_MULTIPLY, "GIMP_LAYER_MODE_MULTIPLY", "multiply" }, + { GIMP_LAYER_MODE_MULTIPLY_LINEAR, "GIMP_LAYER_MODE_MULTIPLY_LINEAR", "multiply-linear" }, + { GIMP_LAYER_MODE_SCREEN, "GIMP_LAYER_MODE_SCREEN", "screen" }, + { GIMP_LAYER_MODE_SCREEN_LINEAR, "GIMP_LAYER_MODE_SCREEN_LINEAR", "screen-linear" }, + { GIMP_LAYER_MODE_OVERLAY_LINEAR, "GIMP_LAYER_MODE_OVERLAY_LINEAR", "overlay-linear" }, + { GIMP_LAYER_MODE_DIFFERENCE, "GIMP_LAYER_MODE_DIFFERENCE", "difference" }, + { GIMP_LAYER_MODE_DIFFERENCE_LINEAR, "GIMP_LAYER_MODE_DIFFERENCE_LINEAR", "difference-linear" }, + { GIMP_LAYER_MODE_ADDITION, "GIMP_LAYER_MODE_ADDITION", "addition" }, + { GIMP_LAYER_MODE_ADDITION_LINEAR, "GIMP_LAYER_MODE_ADDITION_LINEAR", "addition-linear" }, + { GIMP_LAYER_MODE_SUBTRACT, "GIMP_LAYER_MODE_SUBTRACT", "subtract" }, + { GIMP_LAYER_MODE_SUBTRACT_LINEAR, "GIMP_LAYER_MODE_SUBTRACT_LINEAR", "subtract-linear" }, + { GIMP_LAYER_MODE_DARKEN_ONLY, "GIMP_LAYER_MODE_DARKEN_ONLY", "darken-only" }, + { GIMP_LAYER_MODE_LIGHTEN_ONLY, "GIMP_LAYER_MODE_LIGHTEN_ONLY", "lighten-only" }, + { GIMP_LAYER_MODE_HSV_HUE, "GIMP_LAYER_MODE_HSV_HUE", "hsv-hue" }, + { GIMP_LAYER_MODE_HSV_SATURATION, "GIMP_LAYER_MODE_HSV_SATURATION", "hsv-saturation" }, + { GIMP_LAYER_MODE_HSV_COLOR, "GIMP_LAYER_MODE_HSV_COLOR", "hsv-color" }, + { GIMP_LAYER_MODE_HSV_VALUE, "GIMP_LAYER_MODE_HSV_VALUE", "hsv-value" }, + { GIMP_LAYER_MODE_DIVIDE, "GIMP_LAYER_MODE_DIVIDE", "divide" }, + { GIMP_LAYER_MODE_DIVIDE_LINEAR, "GIMP_LAYER_MODE_DIVIDE_LINEAR", "divide-linear" }, + { GIMP_LAYER_MODE_DODGE, "GIMP_LAYER_MODE_DODGE", "dodge" }, + { GIMP_LAYER_MODE_DODGE_LINEAR, "GIMP_LAYER_MODE_DODGE_LINEAR", "dodge-linear" }, + { GIMP_LAYER_MODE_BURN, "GIMP_LAYER_MODE_BURN", "burn" }, + { GIMP_LAYER_MODE_BURN_LINEAR, "GIMP_LAYER_MODE_BURN_LINEAR", "burn-linear" }, + { GIMP_LAYER_MODE_HARDLIGHT, "GIMP_LAYER_MODE_HARDLIGHT", "hardlight" }, + { GIMP_LAYER_MODE_HARDLIGHT_LINEAR, "GIMP_LAYER_MODE_HARDLIGHT_LINEAR", "hardlight-linear" }, + { GIMP_LAYER_MODE_SOFTLIGHT, "GIMP_LAYER_MODE_SOFTLIGHT", "softlight" }, + { GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, "GIMP_LAYER_MODE_SOFTLIGHT_LINEAR", "softlight-linear" }, + { GIMP_LAYER_MODE_GRAIN_EXTRACT, "GIMP_LAYER_MODE_GRAIN_EXTRACT", "grain-extract" }, + { GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, "GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR", "grain-extract-linear" }, + { GIMP_LAYER_MODE_GRAIN_MERGE, "GIMP_LAYER_MODE_GRAIN_MERGE", "grain-merge" }, + { GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, "GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR", "grain-merge-linear" }, + { GIMP_LAYER_MODE_VIVID_LIGHT, "GIMP_LAYER_MODE_VIVID_LIGHT", "vivid-light" }, + { GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, "GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR", "vivid-light-linear" }, + { GIMP_LAYER_MODE_PIN_LIGHT, "GIMP_LAYER_MODE_PIN_LIGHT", "pin-light" }, + { GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, "GIMP_LAYER_MODE_PIN_LIGHT_LINEAR", "pin-light-linear" }, + { GIMP_LAYER_MODE_LINEAR_LIGHT, "GIMP_LAYER_MODE_LINEAR_LIGHT", "linear-light" }, + { GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, "GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR", "linear-light-linear" }, + { GIMP_LAYER_MODE_HARD_MIX, "GIMP_LAYER_MODE_HARD_MIX", "hard-mix" }, + { GIMP_LAYER_MODE_HARD_MIX_LINEAR, "GIMP_LAYER_MODE_HARD_MIX_LINEAR", "hard-mix-linear" }, + { GIMP_LAYER_MODE_EXCLUSION, "GIMP_LAYER_MODE_EXCLUSION", "exclusion" }, + { GIMP_LAYER_MODE_EXCLUSION_LINEAR, "GIMP_LAYER_MODE_EXCLUSION_LINEAR", "exclusion-linear" }, + { GIMP_LAYER_MODE_LINEAR_BURN, "GIMP_LAYER_MODE_LINEAR_BURN", "linear-burn" }, + { GIMP_LAYER_MODE_LINEAR_BURN_LINEAR, "GIMP_LAYER_MODE_LINEAR_BURN_LINEAR", "linear-burn-linear" }, + { GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, "GIMP_LAYER_MODE_LUMA_DARKEN_ONLY", "luma-darken-only" }, + { GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, "GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY", "luminance-darken-only" }, + { GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, "GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY", "luma-lighten-only" }, + { GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, "GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY", "luminance-lighten-only" }, + { GIMP_LAYER_MODE_ERASE, "GIMP_LAYER_MODE_ERASE", "erase" }, + { GIMP_LAYER_MODE_REPLACE, "GIMP_LAYER_MODE_REPLACE", "replace" }, + { GIMP_LAYER_MODE_ANTI_ERASE, "GIMP_LAYER_MODE_ANTI_ERASE", "anti-erase" }, + { 0, NULL, NULL } + }; + + static const GimpEnumDesc descs[] = + { + { GIMP_LAYER_MODE_NORMAL, NC_("layer-mode", "Normal"), NULL }, + { GIMP_LAYER_MODE_DISSOLVE, NC_("layer-mode", "Dissolve"), NULL }, + { GIMP_LAYER_MODE_BEHIND, NC_("layer-mode", "Behind"), NULL }, + { GIMP_LAYER_MODE_MULTIPLY_LEGACY, NC_("layer-mode", "Multiply (legacy)"), NULL }, + { GIMP_LAYER_MODE_SCREEN_LEGACY, NC_("layer-mode", "Screen (legacy)"), NULL }, + { GIMP_LAYER_MODE_OVERLAY_LEGACY, NC_("layer-mode", "Old broken Overlay"), NULL }, + { GIMP_LAYER_MODE_DIFFERENCE_LEGACY, NC_("layer-mode", "Difference (legacy)"), NULL }, + { GIMP_LAYER_MODE_ADDITION_LEGACY, NC_("layer-mode", "Addition (legacy)"), NULL }, + { GIMP_LAYER_MODE_SUBTRACT_LEGACY, NC_("layer-mode", "Subtract (legacy)"), NULL }, + { GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY, NC_("layer-mode", "Darken only (legacy)"), NULL }, + { GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY, NC_("layer-mode", "Lighten only (legacy)"), NULL }, + { GIMP_LAYER_MODE_HSV_HUE_LEGACY, NC_("layer-mode", "Hue (HSV) (legacy)"), NULL }, + { GIMP_LAYER_MODE_HSV_SATURATION_LEGACY, NC_("layer-mode", "Saturation (HSV) (legacy)"), NULL }, + { GIMP_LAYER_MODE_HSV_COLOR_LEGACY, NC_("layer-mode", "Color (HSV) (legacy)"), NULL }, + { GIMP_LAYER_MODE_HSV_VALUE_LEGACY, NC_("layer-mode", "Value (HSV) (legacy)"), NULL }, + { GIMP_LAYER_MODE_DIVIDE_LEGACY, NC_("layer-mode", "Divide (legacy)"), NULL }, + { GIMP_LAYER_MODE_DODGE_LEGACY, NC_("layer-mode", "Dodge (legacy)"), NULL }, + { GIMP_LAYER_MODE_BURN_LEGACY, NC_("layer-mode", "Burn (legacy)"), NULL }, + { GIMP_LAYER_MODE_HARDLIGHT_LEGACY, NC_("layer-mode", "Hard light (legacy)"), NULL }, + { GIMP_LAYER_MODE_SOFTLIGHT_LEGACY, NC_("layer-mode", "Soft light (legacy)"), NULL }, + { GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY, NC_("layer-mode", "Grain extract (legacy)"), NULL }, + { GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY, NC_("layer-mode", "Grain merge (legacy)"), NULL }, + { GIMP_LAYER_MODE_COLOR_ERASE, NC_("layer-mode", "Color erase"), NULL }, + { GIMP_LAYER_MODE_OVERLAY, NC_("layer-mode", "Overlay"), NULL }, + { GIMP_LAYER_MODE_LCH_HUE, NC_("layer-mode", "Hue (LCH)"), NULL }, + { GIMP_LAYER_MODE_LCH_CHROMA, NC_("layer-mode", "Chroma (LCH)"), NULL }, + { GIMP_LAYER_MODE_LCH_COLOR, NC_("layer-mode", "Color (LCH)"), NULL }, + { GIMP_LAYER_MODE_LCH_LIGHTNESS, NC_("layer-mode", "Lightness (LCH)"), NULL }, + { GIMP_LAYER_MODE_NORMAL_LINEAR, NC_("layer-mode", "Normal (linear)"), NULL }, + { GIMP_LAYER_MODE_BEHIND_LINEAR, NC_("layer-mode", "Behind (linear)"), NULL }, + { GIMP_LAYER_MODE_MULTIPLY, NC_("layer-mode", "Multiply"), NULL }, + { GIMP_LAYER_MODE_MULTIPLY_LINEAR, NC_("layer-mode", "Multiply (linear)"), NULL }, + { GIMP_LAYER_MODE_SCREEN, NC_("layer-mode", "Screen"), NULL }, + { GIMP_LAYER_MODE_SCREEN_LINEAR, NC_("layer-mode", "Screen (linear)"), NULL }, + { GIMP_LAYER_MODE_OVERLAY_LINEAR, NC_("layer-mode", "Overlay (linear)"), NULL }, + { GIMP_LAYER_MODE_DIFFERENCE, NC_("layer-mode", "Difference"), NULL }, + { GIMP_LAYER_MODE_DIFFERENCE_LINEAR, NC_("layer-mode", "Difference (linear)"), NULL }, + { GIMP_LAYER_MODE_ADDITION, NC_("layer-mode", "Addition"), NULL }, + { GIMP_LAYER_MODE_ADDITION_LINEAR, NC_("layer-mode", "Addition (linear)"), NULL }, + { GIMP_LAYER_MODE_SUBTRACT, NC_("layer-mode", "Subtract"), NULL }, + { GIMP_LAYER_MODE_SUBTRACT_LINEAR, NC_("layer-mode", "Subtract (linear)"), NULL }, + { GIMP_LAYER_MODE_DARKEN_ONLY, NC_("layer-mode", "Darken only"), NULL }, + { GIMP_LAYER_MODE_LIGHTEN_ONLY, NC_("layer-mode", "Lighten only"), NULL }, + { GIMP_LAYER_MODE_HSV_HUE, NC_("layer-mode", "Hue (HSV)"), NULL }, + { GIMP_LAYER_MODE_HSV_SATURATION, NC_("layer-mode", "Saturation (HSV)"), NULL }, + { GIMP_LAYER_MODE_HSV_COLOR, NC_("layer-mode", "Color (HSV)"), NULL }, + { GIMP_LAYER_MODE_HSV_VALUE, NC_("layer-mode", "Value (HSV)"), NULL }, + { GIMP_LAYER_MODE_DIVIDE, NC_("layer-mode", "Divide"), NULL }, + { GIMP_LAYER_MODE_DIVIDE_LINEAR, NC_("layer-mode", "Divide (linear)"), NULL }, + { GIMP_LAYER_MODE_DODGE, NC_("layer-mode", "Dodge"), NULL }, + { GIMP_LAYER_MODE_DODGE_LINEAR, NC_("layer-mode", "Dodge (linear)"), NULL }, + { GIMP_LAYER_MODE_BURN, NC_("layer-mode", "Burn"), NULL }, + { GIMP_LAYER_MODE_BURN_LINEAR, NC_("layer-mode", "Burn (linear)"), NULL }, + { GIMP_LAYER_MODE_HARDLIGHT, NC_("layer-mode", "Hard light"), NULL }, + { GIMP_LAYER_MODE_HARDLIGHT_LINEAR, NC_("layer-mode", "Hard light (linear)"), NULL }, + { GIMP_LAYER_MODE_SOFTLIGHT, NC_("layer-mode", "Soft light"), NULL }, + { GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, NC_("layer-mode", "Soft light (linear)"), NULL }, + { GIMP_LAYER_MODE_GRAIN_EXTRACT, NC_("layer-mode", "Grain extract"), NULL }, + { GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, NC_("layer-mode", "Grain extract (linear)"), NULL }, + { GIMP_LAYER_MODE_GRAIN_MERGE, NC_("layer-mode", "Grain merge"), NULL }, + { GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, NC_("layer-mode", "Grain merge (linear)"), NULL }, + { GIMP_LAYER_MODE_VIVID_LIGHT, NC_("layer-mode", "Vivid light"), NULL }, + { GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, NC_("layer-mode", "Vivid light (linear)"), NULL }, + { GIMP_LAYER_MODE_PIN_LIGHT, NC_("layer-mode", "Pin light"), NULL }, + { GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, NC_("layer-mode", "Pin light (linear)"), NULL }, + { GIMP_LAYER_MODE_LINEAR_LIGHT, NC_("layer-mode", "Linear light"), NULL }, + { GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, NC_("layer-mode", "Linear light (linear)"), NULL }, + { GIMP_LAYER_MODE_HARD_MIX, NC_("layer-mode", "Hard mix"), NULL }, + { GIMP_LAYER_MODE_HARD_MIX_LINEAR, NC_("layer-mode", "Hard mix (linear)"), NULL }, + { GIMP_LAYER_MODE_EXCLUSION, NC_("layer-mode", "Exclusion"), NULL }, + { GIMP_LAYER_MODE_EXCLUSION_LINEAR, NC_("layer-mode", "Exclusion (linear)"), NULL }, + { GIMP_LAYER_MODE_LINEAR_BURN, NC_("layer-mode", "Linear burn"), NULL }, + { GIMP_LAYER_MODE_LINEAR_BURN_LINEAR, NC_("layer-mode", "Linear burn (linear)"), NULL }, + { GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, NC_("layer-mode", "Luma darken only"), NULL }, + { GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, NC_("layer-mode", "Luminance darken only"), NULL }, + { GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, NC_("layer-mode", "Luma lighten only"), NULL }, + { GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY, NC_("layer-mode", "Luminance lighten only"), NULL }, + { GIMP_LAYER_MODE_ERASE, NC_("layer-mode", "Erase"), NULL }, + { GIMP_LAYER_MODE_REPLACE, NC_("layer-mode", "Replace"), NULL }, + { GIMP_LAYER_MODE_ANTI_ERASE, NC_("layer-mode", "Anti erase"), NULL }, + { 0, NULL, NULL } + }; + + static GType type = 0; + + if (G_UNLIKELY (! type)) + { + type = g_enum_register_static ("GimpLayerMode", values); + gimp_type_set_translation_context (type, "layer-mode"); + gimp_enum_set_value_descriptions (type, descs); + } + + return type; +} + +GType +gimp_layer_mode_group_get_type (void) +{ + static const GEnumValue values[] = + { + { GIMP_LAYER_MODE_GROUP_DEFAULT, "GIMP_LAYER_MODE_GROUP_DEFAULT", "default" }, + { GIMP_LAYER_MODE_GROUP_LINEAR, "GIMP_LAYER_MODE_GROUP_LINEAR", "linear" }, + { GIMP_LAYER_MODE_GROUP_PERCEPTUAL, "GIMP_LAYER_MODE_GROUP_PERCEPTUAL", "perceptual" }, + { GIMP_LAYER_MODE_GROUP_LEGACY, "GIMP_LAYER_MODE_GROUP_LEGACY", "legacy" }, + { 0, NULL, NULL } + }; + + static const GimpEnumDesc descs[] = + { + { GIMP_LAYER_MODE_GROUP_DEFAULT, NC_("layer-mode-group", "Default"), NULL }, + { GIMP_LAYER_MODE_GROUP_LINEAR, NC_("layer-mode-group", "Linear light"), NULL }, + { GIMP_LAYER_MODE_GROUP_PERCEPTUAL, NC_("layer-mode-group", "Perceptual"), NULL }, + { GIMP_LAYER_MODE_GROUP_LEGACY, NC_("layer-mode-group", "Legacy"), NULL }, + { 0, NULL, NULL } + }; + + static GType type = 0; + + if (G_UNLIKELY (! type)) + { + type = g_enum_register_static ("GimpLayerModeGroup", values); + gimp_type_set_translation_context (type, "layer-mode-group"); + gimp_enum_set_value_descriptions (type, descs); + } + + return type; +} + /* Generated data ends here */ diff --git a/app/operations/operations-enums.h b/app/operations/operations-enums.h index 073956230d..3ee565ba1f 100644 --- a/app/operations/operations-enums.h +++ b/app/operations/operations-enums.h @@ -47,11 +47,119 @@ typedef enum } GimpLayerCompositeMode; +#define GIMP_TYPE_LAYER_MODE (gimp_layer_mode_get_type ()) + +GType gimp_layer_mode_get_type (void) G_GNUC_CONST; + +typedef enum +{ + /* Modes that exist since ancient times */ + GIMP_LAYER_MODE_NORMAL, /*< desc="Normal" >*/ + GIMP_LAYER_MODE_DISSOLVE, /*< desc="Dissolve" >*/ + GIMP_LAYER_MODE_BEHIND, /*< desc="Behind" >*/ + GIMP_LAYER_MODE_MULTIPLY_LEGACY, /*< desc="Multiply (legacy)" >*/ + GIMP_LAYER_MODE_SCREEN_LEGACY, /*< desc="Screen (legacy)" >*/ + GIMP_LAYER_MODE_OVERLAY_LEGACY, /*< desc="Old broken Overlay" >*/ + GIMP_LAYER_MODE_DIFFERENCE_LEGACY, /*< desc="Difference (legacy)" >*/ + GIMP_LAYER_MODE_ADDITION_LEGACY, /*< desc="Addition (legacy)" >*/ + GIMP_LAYER_MODE_SUBTRACT_LEGACY, /*< desc="Subtract (legacy)" >*/ + GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY, /*< desc="Darken only (legacy)" >*/ + GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY, /*< desc="Lighten only (legacy)" >*/ + GIMP_LAYER_MODE_HSV_HUE_LEGACY, /*< desc="Hue (HSV) (legacy)" >*/ + GIMP_LAYER_MODE_HSV_SATURATION_LEGACY, /*< desc="Saturation (HSV) (legacy)">*/ + GIMP_LAYER_MODE_HSV_COLOR_LEGACY, /*< desc="Color (HSV) (legacy)" >*/ + GIMP_LAYER_MODE_HSV_VALUE_LEGACY, /*< desc="Value (HSV) (legacy)" >*/ + GIMP_LAYER_MODE_DIVIDE_LEGACY, /*< desc="Divide (legacy)" >*/ + GIMP_LAYER_MODE_DODGE_LEGACY, /*< desc="Dodge (legacy)" >*/ + GIMP_LAYER_MODE_BURN_LEGACY, /*< desc="Burn (legacy)" >*/ + GIMP_LAYER_MODE_HARDLIGHT_LEGACY, /*< desc="Hard light (legacy)" >*/ + GIMP_LAYER_MODE_SOFTLIGHT_LEGACY, /*< desc="Soft light (legacy)" >*/ + GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY, /*< desc="Grain extract (legacy)" >*/ + GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY, /*< desc="Grain merge (legacy)" >*/ + GIMP_LAYER_MODE_COLOR_ERASE, /*< desc="Color erase" >*/ + + /* Since 2.8 */ + GIMP_LAYER_MODE_OVERLAY, /*< desc="Overlay" >*/ + GIMP_LAYER_MODE_LCH_HUE, /*< desc="Hue (LCH)" >*/ + GIMP_LAYER_MODE_LCH_CHROMA, /*< desc="Chroma (LCH)" >*/ + GIMP_LAYER_MODE_LCH_COLOR, /*< desc="Color (LCH)" >*/ + GIMP_LAYER_MODE_LCH_LIGHTNESS, /*< desc="Lightness (LCH)" >*/ + + /* Since 2.10 */ + GIMP_LAYER_MODE_NORMAL_LINEAR, /*< desc="Normal (linear)" >*/ + GIMP_LAYER_MODE_BEHIND_LINEAR, /*< desc="Behind (linear)" >*/ + GIMP_LAYER_MODE_MULTIPLY, /*< desc="Multiply" >*/ + GIMP_LAYER_MODE_MULTIPLY_LINEAR, /*< desc="Multiply (linear)" >*/ + GIMP_LAYER_MODE_SCREEN, /*< desc="Screen" >*/ + GIMP_LAYER_MODE_SCREEN_LINEAR, /*< desc="Screen (linear)" >*/ + GIMP_LAYER_MODE_OVERLAY_LINEAR, /*< desc="Overlay (linear)" >*/ + GIMP_LAYER_MODE_DIFFERENCE, /*< desc="Difference" >*/ + GIMP_LAYER_MODE_DIFFERENCE_LINEAR, /*< desc="Difference (linear)" >*/ + GIMP_LAYER_MODE_ADDITION, /*< desc="Addition" >*/ + GIMP_LAYER_MODE_ADDITION_LINEAR, /*< desc="Addition (linear)" >*/ + GIMP_LAYER_MODE_SUBTRACT, /*< desc="Subtract" >*/ + GIMP_LAYER_MODE_SUBTRACT_LINEAR, /*< desc="Subtract (linear)" >*/ + GIMP_LAYER_MODE_DARKEN_ONLY, /*< desc="Darken only" >*/ + GIMP_LAYER_MODE_LIGHTEN_ONLY, /*< desc="Lighten only" >*/ + GIMP_LAYER_MODE_HSV_HUE, /*< desc="Hue (HSV)" >*/ + GIMP_LAYER_MODE_HSV_SATURATION, /*< desc="Saturation (HSV)" >*/ + GIMP_LAYER_MODE_HSV_COLOR, /*< desc="Color (HSV)" >*/ + GIMP_LAYER_MODE_HSV_VALUE, /*< desc="Value (HSV)" >*/ + GIMP_LAYER_MODE_DIVIDE, /*< desc="Divide" >*/ + GIMP_LAYER_MODE_DIVIDE_LINEAR, /*< desc="Divide (linear)" >*/ + GIMP_LAYER_MODE_DODGE, /*< desc="Dodge" >*/ + GIMP_LAYER_MODE_DODGE_LINEAR, /*< desc="Dodge (linear)" >*/ + GIMP_LAYER_MODE_BURN, /*< desc="Burn" >*/ + GIMP_LAYER_MODE_BURN_LINEAR, /*< desc="Burn (linear)" >*/ + GIMP_LAYER_MODE_HARDLIGHT, /*< desc="Hard light" >*/ + GIMP_LAYER_MODE_HARDLIGHT_LINEAR, /*< desc="Hard light (linear)" >*/ + GIMP_LAYER_MODE_SOFTLIGHT, /*< desc="Soft light" >*/ + GIMP_LAYER_MODE_SOFTLIGHT_LINEAR, /*< desc="Soft light (linear)" >*/ + GIMP_LAYER_MODE_GRAIN_EXTRACT, /*< desc="Grain extract" >*/ + GIMP_LAYER_MODE_GRAIN_EXTRACT_LINEAR, /*< desc="Grain extract (linear)" >*/ + GIMP_LAYER_MODE_GRAIN_MERGE, /*< desc="Grain merge" >*/ + GIMP_LAYER_MODE_GRAIN_MERGE_LINEAR, /*< desc="Grain merge (linear)" >*/ + GIMP_LAYER_MODE_VIVID_LIGHT, /*< desc="Vivid light" >*/ + GIMP_LAYER_MODE_VIVID_LIGHT_LINEAR, /*< desc="Vivid light (linear)" >*/ + GIMP_LAYER_MODE_PIN_LIGHT, /*< desc="Pin light" >*/ + GIMP_LAYER_MODE_PIN_LIGHT_LINEAR, /*< desc="Pin light (linear)" >*/ + GIMP_LAYER_MODE_LINEAR_LIGHT, /*< desc="Linear light" >*/ + GIMP_LAYER_MODE_LINEAR_LIGHT_LINEAR, /*< desc="Linear light (linear)" >*/ + GIMP_LAYER_MODE_HARD_MIX, /*< desc="Hard mix" >*/ + GIMP_LAYER_MODE_HARD_MIX_LINEAR, /*< desc="Hard mix (linear)" >*/ + GIMP_LAYER_MODE_EXCLUSION, /*< desc="Exclusion" >*/ + GIMP_LAYER_MODE_EXCLUSION_LINEAR, /*< desc="Exclusion (linear)" >*/ + GIMP_LAYER_MODE_LINEAR_BURN, /*< desc="Linear burn" >*/ + GIMP_LAYER_MODE_LINEAR_BURN_LINEAR, /*< desc="Linear burn (linear)" >*/ + GIMP_LAYER_MODE_LUMA_DARKEN_ONLY, /*< desc="Luma darken only" >*/ + GIMP_LAYER_MODE_LUMINANCE_DARKEN_ONLY, /*< desc="Luminance darken only" >*/ + GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY, /*< desc="Luma lighten only" >*/ + GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY,/*< desc="Luminance lighten only" >*/ + + /* Internal modes, not available to the PDB, must be kept at the end */ + GIMP_LAYER_MODE_ERASE, /*< pdb-skip, desc="Erase" >*/ + GIMP_LAYER_MODE_REPLACE, /*< pdb-skip, desc="Replace" >*/ + GIMP_LAYER_MODE_ANTI_ERASE /*< pdb-skip, desc="Anti erase" >*/ +} GimpLayerMode; + + +#define GIMP_TYPE_LAYER_MODE_GROUP (gimp_layer_mode_group_get_type ()) + +GType gimp_layer_mode_group_get_type (void) G_GNUC_CONST; + +typedef enum /*< pdb-skip >*/ +{ + GIMP_LAYER_MODE_GROUP_DEFAULT, /*< desc="Default" >*/ + GIMP_LAYER_MODE_GROUP_LINEAR, /*< desc="Linear light" >*/ + GIMP_LAYER_MODE_GROUP_PERCEPTUAL, /*< desc="Perceptual" >*/ + GIMP_LAYER_MODE_GROUP_LEGACY, /*< desc="Legacy" >*/ +} GimpLayerModeGroup; + + /* * non-registered enums; register them if needed */ - typedef enum /*< pdb-skip, skip >*/ { GIMP_LAYER_MODE_AFFECT_NONE = 0, @@ -59,5 +167,11 @@ typedef enum /*< pdb-skip, skip >*/ GIMP_LAYER_MODE_AFFECT_SRC = 1 << 1 } GimpLayerModeAffectMask; +typedef enum /*< pdb-skip, skip >*/ +{ + GIMP_LAYER_MODE_FLAG_LEGACY = 1 << 0, + GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA = 1 << 1 +} GimpLayerModeFlags; + #endif /* __OPERATIONS_ENUMS_H__ */ diff --git a/app/paint/gimpbrushcore.c b/app/paint/gimpbrushcore.c index 540d6e5f76..d495bfafbc 100644 --- a/app/paint/gimpbrushcore.c +++ b/app/paint/gimpbrushcore.c @@ -26,9 +26,10 @@ #include "paint-types.h" +#include "operations/layer-modes/gimp-layer-modes.h" + #include "gegl/gimp-babl.h" -#include "core/gimp-layer-modes.h" #include "core/gimpbrush.h" #include "core/gimpbrushgenerated.h" #include "core/gimpdrawable.h" diff --git a/app/paint/gimpink.c b/app/paint/gimpink.c index 8f8cf9ec22..3ee478ffe9 100644 --- a/app/paint/gimpink.c +++ b/app/paint/gimpink.c @@ -26,9 +26,10 @@ #include "paint-types.h" +#include "operations/layer-modes/gimp-layer-modes.h" + #include "gegl/gimp-gegl-utils.h" -#include "core/gimp-layer-modes.h" #include "core/gimp-palettes.h" #include "core/gimpdrawable.h" #include "core/gimpimage.h" diff --git a/app/paint/gimppaintcore-loops.c b/app/paint/gimppaintcore-loops.c index e72dab1d55..63463d9022 100644 --- a/app/paint/gimppaintcore-loops.c +++ b/app/paint/gimppaintcore-loops.c @@ -22,7 +22,8 @@ #include "paint-types.h" -#include "core/gimp-layer-modes.h" +#include "operations/layer-modes/gimp-layer-modes.h" + #include "core/gimptempbuf.h" #include "operations/layer-modes/gimplayermodefunctions.h" diff --git a/app/paint/gimppaintcore.c b/app/paint/gimppaintcore.c index 72bc503148..dc7ea1e11f 100644 --- a/app/paint/gimppaintcore.c +++ b/app/paint/gimppaintcore.c @@ -28,13 +28,14 @@ #include "paint-types.h" +#include "operations/layer-modes/gimp-layer-modes.h" + #include "gegl/gimp-gegl-loops.h" #include "gegl/gimp-gegl-nodes.h" #include "gegl/gimp-gegl-utils.h" #include "gegl/gimpapplicator.h" #include "core/gimp.h" -#include "core/gimp-layer-modes.h" #include "core/gimp-utils.h" #include "core/gimpchannel.h" #include "core/gimpimage.h" diff --git a/app/widgets/gimplayermodebox.c b/app/widgets/gimplayermodebox.c index 7ae6f55a42..0b06e27b16 100644 --- a/app/widgets/gimplayermodebox.c +++ b/app/widgets/gimplayermodebox.c @@ -28,7 +28,7 @@ #include "widgets-types.h" -#include "core/gimp-layer-modes.h" +#include "operations/layer-modes/gimp-layer-modes.h" #include "gimplayermodebox.h" #include "gimplayermodecombobox.h" diff --git a/app/widgets/gimplayermodecombobox.c b/app/widgets/gimplayermodecombobox.c index 733773d684..bc45c29518 100644 --- a/app/widgets/gimplayermodecombobox.c +++ b/app/widgets/gimplayermodecombobox.c @@ -28,7 +28,7 @@ #include "widgets-types.h" -#include "core/gimp-layer-modes.h" +#include "operations/layer-modes/gimp-layer-modes.h" #include "gimplayermodecombobox.h" diff --git a/tools/pdbgen/enums.pl b/tools/pdbgen/enums.pl index e60ef6224a..9e8b13a8a2 100644 --- a/tools/pdbgen/enums.pl +++ b/tools/pdbgen/enums.pl @@ -683,32 +683,9 @@ package Gimp::CodeGen::enums; GIMP_LAYER_COMPOSITE_SRC_IN => '3', GIMP_LAYER_COMPOSITE_DST_ATOP => '4' } }, - GimpConvertDitherType => - { contig => 1, - header => 'core/core-enums.h', - symbols => [ qw(GIMP_NO_DITHER GIMP_FS_DITHER - GIMP_FSLOWBLEED_DITHER GIMP_FIXED_DITHER) ], - mapping => { GIMP_NO_DITHER => '0', - GIMP_FS_DITHER => '1', - GIMP_FSLOWBLEED_DITHER => '2', - GIMP_FIXED_DITHER => '3' } - }, - GimpHistogramChannel => - { contig => 1, - header => 'core/core-enums.h', - symbols => [ qw(GIMP_HISTOGRAM_VALUE GIMP_HISTOGRAM_RED - GIMP_HISTOGRAM_GREEN GIMP_HISTOGRAM_BLUE - GIMP_HISTOGRAM_ALPHA GIMP_HISTOGRAM_LUMINANCE) ], - mapping => { GIMP_HISTOGRAM_VALUE => '0', - GIMP_HISTOGRAM_RED => '1', - GIMP_HISTOGRAM_GREEN => '2', - GIMP_HISTOGRAM_BLUE => '3', - GIMP_HISTOGRAM_ALPHA => '4', - GIMP_HISTOGRAM_LUMINANCE => '5' } - }, GimpLayerMode => { contig => 1, - header => 'core/core-enums.h', + header => 'operations/operations-enums.h', symbols => [ qw(GIMP_LAYER_MODE_NORMAL GIMP_LAYER_MODE_DISSOLVE GIMP_LAYER_MODE_BEHIND GIMP_LAYER_MODE_MULTIPLY_LEGACY @@ -859,6 +836,29 @@ package Gimp::CodeGen::enums; GIMP_LAYER_MODE_LUMA_LIGHTEN_ONLY => '75', GIMP_LAYER_MODE_LUMINANCE_LIGHTEN_ONLY => '76' } }, + GimpConvertDitherType => + { contig => 1, + header => 'core/core-enums.h', + symbols => [ qw(GIMP_NO_DITHER GIMP_FS_DITHER + GIMP_FSLOWBLEED_DITHER GIMP_FIXED_DITHER) ], + mapping => { GIMP_NO_DITHER => '0', + GIMP_FS_DITHER => '1', + GIMP_FSLOWBLEED_DITHER => '2', + GIMP_FIXED_DITHER => '3' } + }, + GimpHistogramChannel => + { contig => 1, + header => 'core/core-enums.h', + symbols => [ qw(GIMP_HISTOGRAM_VALUE GIMP_HISTOGRAM_RED + GIMP_HISTOGRAM_GREEN GIMP_HISTOGRAM_BLUE + GIMP_HISTOGRAM_ALPHA GIMP_HISTOGRAM_LUMINANCE) ], + mapping => { GIMP_HISTOGRAM_VALUE => '0', + GIMP_HISTOGRAM_RED => '1', + GIMP_HISTOGRAM_GREEN => '2', + GIMP_HISTOGRAM_BLUE => '3', + GIMP_HISTOGRAM_ALPHA => '4', + GIMP_HISTOGRAM_LUMINANCE => '5' } + }, GimpBrushApplicationMode => { contig => 1, header => 'paint/paint-enums.h',