app: remove GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA and friends
Instead, add a gimp_layer_mode_get_format() function, which takes the layer mode, composite space, and blend space, and returns the I/O format. Currently, we always use the composite space format as the I/O format. This simplifies gimp_composite_blend(), and gives us composite-space support for the "special" layer mode ops for free.
This commit is contained in:
@ -90,8 +90,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:dissolve",
|
||||
.function = gimp_operation_dissolve_process,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE |
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE |
|
||||
GIMP_LAYER_MODE_FLAG_COMPOSITE_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
@ -411,7 +410,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -423,8 +421,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -436,8 +433,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -449,8 +445,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -462,8 +457,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -475,8 +469,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:normal",
|
||||
.function = gimp_operation_normal_process,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
@ -487,8 +480,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:behind",
|
||||
.function = gimp_operation_behind_process,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_PAINT |
|
||||
GIMP_LAYER_MODE_CONTEXT_FADE,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
@ -500,7 +492,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -512,7 +503,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -524,7 +514,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -536,7 +525,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -548,7 +536,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -560,7 +547,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -572,7 +558,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -584,7 +569,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -596,7 +580,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -608,7 +591,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -620,7 +602,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -632,8 +613,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -644,8 +624,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -656,8 +635,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -669,8 +647,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -682,8 +659,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -695,8 +671,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -708,7 +683,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -720,7 +694,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -732,7 +705,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -744,7 +716,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -756,7 +727,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -768,7 +738,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -780,7 +749,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -792,7 +760,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -804,7 +771,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -816,7 +782,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -828,7 +793,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -840,7 +804,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -852,7 +815,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -864,7 +826,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -876,7 +837,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -888,7 +848,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -900,7 +859,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -912,7 +870,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -924,7 +881,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -936,7 +892,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -948,7 +903,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -960,7 +914,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -972,7 +925,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -984,7 +936,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -996,7 +947,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -1008,7 +958,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -1020,7 +969,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -1032,7 +980,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -1044,7 +991,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -1056,7 +1002,6 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:layer-mode",
|
||||
.function = gimp_operation_layer_mode_process_pixels,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -1068,8 +1013,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:erase",
|
||||
.function = gimp_operation_erase_process,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_FADE,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_ATOP,
|
||||
@ -1080,8 +1024,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:replace",
|
||||
.function = gimp_operation_replace_process,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_FADE,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
.composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
@ -1092,8 +1035,7 @@ static const GimpLayerModeInfo layer_mode_infos[] =
|
||||
|
||||
.op_name = "gimp:anti-erase",
|
||||
.function = gimp_operation_anti_erase_process,
|
||||
.flags = GIMP_LAYER_MODE_FLAG_WANTS_LINEAR_DATA |
|
||||
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE |
|
||||
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE |
|
||||
GIMP_LAYER_MODE_FLAG_COMPOSITE_SPACE_IMMUTABLE,
|
||||
.context = GIMP_LAYER_MODE_CONTEXT_FADE,
|
||||
.paint_composite_mode = GIMP_LAYER_COMPOSITE_SRC_OVER,
|
||||
@ -1543,15 +1485,6 @@ gimp_layer_mode_is_legacy (GimpLayerMode mode)
|
||||
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;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_layer_mode_is_blend_space_mutable (GimpLayerMode mode)
|
||||
{
|
||||
@ -1738,3 +1671,45 @@ gimp_layer_mode_get_for_group (GimpLayerMode old_mode,
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
const Babl *
|
||||
gimp_layer_mode_get_format (GimpLayerMode mode,
|
||||
GimpLayerColorSpace composite_space,
|
||||
GimpLayerColorSpace blend_space,
|
||||
const Babl *preferred_format)
|
||||
{
|
||||
/* for now, all modes perform i/o in the composite space. */
|
||||
(void) mode;
|
||||
(void) blend_space;
|
||||
|
||||
if (composite_space == GIMP_LAYER_COLOR_SPACE_AUTO)
|
||||
composite_space = gimp_layer_mode_get_composite_space (mode);
|
||||
|
||||
switch (composite_space)
|
||||
{
|
||||
case GIMP_LAYER_COLOR_SPACE_AUTO:
|
||||
/* compositing is color-space agnostic. try to return the preferred
|
||||
* format, and fall back to linear.
|
||||
*/
|
||||
if (preferred_format == babl_format ("RGBA float") ||
|
||||
preferred_format == babl_format ("R'G'B'A float"))
|
||||
{
|
||||
return preferred_format;
|
||||
}
|
||||
else
|
||||
{
|
||||
return babl_format ("RGBA float");
|
||||
}
|
||||
|
||||
case GIMP_LAYER_COLOR_SPACE_RGB_LINEAR:
|
||||
return babl_format ("RGBA float");
|
||||
|
||||
case GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL:
|
||||
return babl_format ("R'G'B'A float");
|
||||
|
||||
case GIMP_LAYER_COLOR_SPACE_LAB:
|
||||
return babl_format ("CIE Lab alpha float");
|
||||
}
|
||||
|
||||
g_return_val_if_reached (babl_format ("RGBA float"));
|
||||
}
|
||||
|
@ -25,33 +25,37 @@
|
||||
|
||||
void gimp_layer_modes_init (void);
|
||||
|
||||
gboolean gimp_layer_mode_is_legacy (GimpLayerMode mode);
|
||||
gboolean gimp_layer_mode_wants_linear_data (GimpLayerMode mode);
|
||||
gboolean gimp_layer_mode_is_legacy (GimpLayerMode mode);
|
||||
|
||||
gboolean gimp_layer_mode_is_blend_space_mutable (GimpLayerMode mode);
|
||||
gboolean gimp_layer_mode_is_composite_space_mutable (GimpLayerMode mode);
|
||||
gboolean gimp_layer_mode_is_composite_mode_mutable (GimpLayerMode mode);
|
||||
gboolean gimp_layer_mode_is_blend_space_mutable (GimpLayerMode mode);
|
||||
gboolean gimp_layer_mode_is_composite_space_mutable (GimpLayerMode mode);
|
||||
gboolean gimp_layer_mode_is_composite_mode_mutable (GimpLayerMode mode);
|
||||
|
||||
GimpLayerColorSpace gimp_layer_mode_get_blend_space (GimpLayerMode mode);
|
||||
GimpLayerColorSpace gimp_layer_mode_get_composite_space (GimpLayerMode mode);
|
||||
GimpLayerCompositeMode gimp_layer_mode_get_composite_mode (GimpLayerMode mode);
|
||||
GimpLayerColorSpace gimp_layer_mode_get_blend_space (GimpLayerMode mode);
|
||||
GimpLayerColorSpace gimp_layer_mode_get_composite_space (GimpLayerMode mode);
|
||||
GimpLayerCompositeMode gimp_layer_mode_get_composite_mode (GimpLayerMode mode);
|
||||
GimpLayerCompositeMode gimp_layer_mode_get_paint_composite_mode
|
||||
(GimpLayerMode mode);
|
||||
(GimpLayerMode mode);
|
||||
|
||||
const gchar * gimp_layer_mode_get_operation (GimpLayerMode mode);
|
||||
const gchar * gimp_layer_mode_get_operation (GimpLayerMode mode);
|
||||
|
||||
GimpLayerModeFunc gimp_layer_mode_get_function (GimpLayerMode mode);
|
||||
GimpLayerModeFunc gimp_layer_mode_get_function (GimpLayerMode mode);
|
||||
|
||||
GimpLayerModeContext gimp_layer_mode_get_context (GimpLayerMode mode);
|
||||
GimpLayerModeContext gimp_layer_mode_get_context (GimpLayerMode mode);
|
||||
|
||||
GimpLayerModeGroup gimp_layer_mode_get_group (GimpLayerMode mode);
|
||||
GimpLayerModeGroup gimp_layer_mode_get_group (GimpLayerMode mode);
|
||||
|
||||
const GimpLayerMode * gimp_layer_mode_get_group_array (GimpLayerModeGroup group,
|
||||
gint *n_modes);
|
||||
const GimpLayerMode * gimp_layer_mode_get_group_array (GimpLayerModeGroup group,
|
||||
gint *n_modes);
|
||||
|
||||
gboolean gimp_layer_mode_get_for_group (GimpLayerMode old_mode,
|
||||
GimpLayerModeGroup new_group,
|
||||
GimpLayerMode *new_mode);
|
||||
gboolean gimp_layer_mode_get_for_group (GimpLayerMode old_mode,
|
||||
GimpLayerModeGroup new_group,
|
||||
GimpLayerMode *new_mode);
|
||||
|
||||
const Babl * gimp_layer_mode_get_format (GimpLayerMode mode,
|
||||
GimpLayerColorSpace composite_space,
|
||||
GimpLayerColorSpace blend_space,
|
||||
const Babl *preferred_format);
|
||||
|
||||
|
||||
#endif /* __GIMP_LAYER_MODES_H__ */
|
||||
|
@ -31,6 +31,7 @@
|
||||
|
||||
#include "../operations-types.h"
|
||||
|
||||
#include "gimp-layer-modes.h"
|
||||
#include "gimpoperationlayermode.h"
|
||||
|
||||
|
||||
@ -38,7 +39,6 @@ enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_LAYER_MODE,
|
||||
PROP_LINEAR,
|
||||
PROP_OPACITY,
|
||||
PROP_BLEND_SPACE,
|
||||
PROP_COMPOSITE_SPACE,
|
||||
@ -119,12 +119,7 @@ G_DEFINE_TYPE (GimpOperationLayerMode, gimp_operation_layer_mode,
|
||||
#define parent_class gimp_operation_layer_mode_parent_class
|
||||
|
||||
|
||||
static const Babl *_gimp_fish_rgba_to_perceptual = NULL;
|
||||
static const Babl *_gimp_fish_perceptual_to_rgba = NULL;
|
||||
static const Babl *_gimp_fish_perceptual_to_laba = NULL;
|
||||
static const Babl *_gimp_fish_rgba_to_laba = NULL;
|
||||
static const Babl *_gimp_fish_laba_to_rgba = NULL;
|
||||
static const Babl *_gimp_fish_laba_to_perceptual = NULL;
|
||||
static const Babl *gimp_layer_color_space_fish[3 /* from */][3 /* to */];
|
||||
|
||||
static CompositeFunc composite_func_src_atop = composite_func_src_atop_core;
|
||||
static CompositeFunc composite_func_dst_atop = composite_func_dst_atop_core;
|
||||
@ -163,13 +158,6 @@ gimp_operation_layer_mode_class_init (GimpOperationLayerModeClass *klass)
|
||||
GIMP_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_LINEAR,
|
||||
g_param_spec_boolean ("linear",
|
||||
NULL, NULL,
|
||||
FALSE,
|
||||
GIMP_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_OPACITY,
|
||||
g_param_spec_double ("opacity",
|
||||
NULL, NULL,
|
||||
@ -202,13 +190,32 @@ gimp_operation_layer_mode_class_init (GimpOperationLayerModeClass *klass)
|
||||
GIMP_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT));
|
||||
|
||||
_gimp_fish_rgba_to_perceptual = babl_fish ("RGBA float", "R'G'B'A float");
|
||||
_gimp_fish_perceptual_to_rgba = babl_fish ("R'G'B'A float", "RGBA float");
|
||||
_gimp_fish_perceptual_to_laba = babl_fish ("R'G'B'A float", "CIE Lab alpha float");
|
||||
gimp_layer_color_space_fish
|
||||
/* from */ [GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - 1]
|
||||
/* to */ [GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - 1] =
|
||||
babl_fish ("RGBA float", "R'G'B'A float");
|
||||
gimp_layer_color_space_fish
|
||||
/* from */ [GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - 1]
|
||||
/* to */ [GIMP_LAYER_COLOR_SPACE_LAB - 1] =
|
||||
babl_fish ("RGBA float", "CIE Lab alpha float");
|
||||
|
||||
_gimp_fish_rgba_to_laba = babl_fish ("RGBA float", "CIE Lab alpha float");
|
||||
_gimp_fish_laba_to_rgba = babl_fish ("CIE Lab alpha float", "RGBA float");
|
||||
_gimp_fish_laba_to_perceptual = babl_fish ("CIE Lab alpha float", "R'G'B'A float");
|
||||
gimp_layer_color_space_fish
|
||||
/* from */ [GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - 1]
|
||||
/* to */ [GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - 1] =
|
||||
babl_fish ("R'G'B'A float", "RGBA float");
|
||||
gimp_layer_color_space_fish
|
||||
/* from */ [GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - 1]
|
||||
/* to */ [GIMP_LAYER_COLOR_SPACE_LAB - 1] =
|
||||
babl_fish ("R'G'B'A float", "CIE Lab alpha float");
|
||||
|
||||
gimp_layer_color_space_fish
|
||||
/* from */ [GIMP_LAYER_COLOR_SPACE_LAB - 1]
|
||||
/* to */ [GIMP_LAYER_COLOR_SPACE_RGB_LINEAR - 1] =
|
||||
babl_fish ("CIE Lab alpha float", "RGBA float");
|
||||
gimp_layer_color_space_fish
|
||||
/* from */ [GIMP_LAYER_COLOR_SPACE_LAB - 1]
|
||||
/* to */ [GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL - 1] =
|
||||
babl_fish ("CIE Lab alpha float", "R'G'B'A float");
|
||||
|
||||
#if COMPILE_SSE2_INTRINISICS
|
||||
if (gimp_cpu_accel_get_support () & GIMP_CPU_ACCEL_X86_SSE2)
|
||||
@ -235,10 +242,6 @@ gimp_operation_layer_mode_set_property (GObject *object,
|
||||
self->layer_mode = g_value_get_enum (value);
|
||||
break;
|
||||
|
||||
case PROP_LINEAR:
|
||||
self->linear = g_value_get_boolean (value);
|
||||
break;
|
||||
|
||||
case PROP_OPACITY:
|
||||
self->opacity = g_value_get_double (value);
|
||||
break;
|
||||
@ -275,10 +278,6 @@ gimp_operation_layer_mode_get_property (GObject *object,
|
||||
g_value_set_enum (value, self->layer_mode);
|
||||
break;
|
||||
|
||||
case PROP_LINEAR:
|
||||
g_value_set_boolean (value, self->linear);
|
||||
break;
|
||||
|
||||
case PROP_OPACITY:
|
||||
g_value_set_double (value, self->opacity);
|
||||
break;
|
||||
@ -305,12 +304,15 @@ static void
|
||||
gimp_operation_layer_mode_prepare (GeglOperation *operation)
|
||||
{
|
||||
GimpOperationLayerMode *self = GIMP_OPERATION_LAYER_MODE (operation);
|
||||
const Babl *in_format;
|
||||
const Babl *format;
|
||||
|
||||
if (self->linear)
|
||||
format = babl_format ("RGBA float");
|
||||
else
|
||||
format = babl_format ("R'G'B'A float");
|
||||
in_format = gegl_operation_get_source_format (operation, "input");
|
||||
|
||||
format = gimp_layer_mode_get_format (self->layer_mode,
|
||||
self->composite_space,
|
||||
self->blend_space,
|
||||
in_format);
|
||||
|
||||
gegl_operation_set_format (operation, "input", format);
|
||||
gegl_operation_set_format (operation, "output", format);
|
||||
@ -753,101 +755,41 @@ gimp_composite_blend (GimpOperationLayerMode *layer_mode,
|
||||
glong samples,
|
||||
GimpBlendFunc blend_func)
|
||||
{
|
||||
gfloat opacity = layer_mode->opacity;
|
||||
GimpLayerColorSpace blend_space = layer_mode->blend_space;
|
||||
GimpLayerColorSpace composite_space= layer_mode->composite_space;
|
||||
GimpLayerCompositeMode composite_mode = layer_mode->composite_mode;
|
||||
gfloat opacity = layer_mode->opacity;
|
||||
GimpLayerColorSpace blend_space = layer_mode->blend_space;
|
||||
GimpLayerColorSpace composite_space = layer_mode->composite_space;
|
||||
GimpLayerCompositeMode composite_mode = layer_mode->composite_mode;
|
||||
|
||||
gfloat *blend_in = in;
|
||||
gfloat *blend_layer = layer;
|
||||
gfloat *blend_out = out;
|
||||
|
||||
gfloat *composite_in = NULL;
|
||||
gfloat *composite_layer = NULL;
|
||||
|
||||
gboolean composite_needs_in_color =
|
||||
composite_mode == GIMP_LAYER_COMPOSITE_SRC_OVER ||
|
||||
composite_mode == GIMP_LAYER_COMPOSITE_SRC_ATOP;
|
||||
gboolean composite_needs_layer_color =
|
||||
composite_mode == GIMP_LAYER_COMPOSITE_SRC_OVER ||
|
||||
composite_mode == GIMP_LAYER_COMPOSITE_DST_ATOP;
|
||||
|
||||
const Babl *fish_to_blend = NULL;
|
||||
const Babl *fish_to_composite = NULL;
|
||||
const Babl *fish_from_composite = NULL;
|
||||
const Babl *composite_to_blend_fish = NULL;
|
||||
const Babl *blend_to_composite_fish = NULL;
|
||||
|
||||
switch (blend_space)
|
||||
if (blend_space != GIMP_LAYER_COLOR_SPACE_AUTO)
|
||||
{
|
||||
default:
|
||||
case GIMP_LAYER_COLOR_SPACE_RGB_LINEAR:
|
||||
fish_to_blend = NULL;
|
||||
switch (composite_space)
|
||||
{
|
||||
case GIMP_LAYER_COLOR_SPACE_LAB:
|
||||
fish_to_composite = _gimp_fish_rgba_to_laba;
|
||||
fish_from_composite = _gimp_fish_laba_to_rgba;
|
||||
break;
|
||||
default:
|
||||
case GIMP_LAYER_COLOR_SPACE_RGB_LINEAR:
|
||||
fish_to_composite = NULL;
|
||||
fish_from_composite = NULL;
|
||||
break;
|
||||
case GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL:
|
||||
fish_to_composite = _gimp_fish_rgba_to_perceptual;
|
||||
fish_from_composite = _gimp_fish_perceptual_to_rgba;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
g_assert (composite_space >= 1 && composite_space < 4);
|
||||
g_assert (blend_space >= 1 && blend_space < 4);
|
||||
|
||||
case GIMP_LAYER_COLOR_SPACE_LAB:
|
||||
fish_to_blend = _gimp_fish_rgba_to_laba;
|
||||
switch (composite_space)
|
||||
{
|
||||
case GIMP_LAYER_COLOR_SPACE_LAB:
|
||||
default:
|
||||
fish_to_composite = NULL;
|
||||
fish_from_composite = _gimp_fish_laba_to_rgba;
|
||||
break;
|
||||
case GIMP_LAYER_COLOR_SPACE_RGB_LINEAR:
|
||||
fish_to_composite = _gimp_fish_laba_to_rgba;
|
||||
fish_from_composite = NULL;
|
||||
break;
|
||||
case GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL:
|
||||
fish_to_composite = _gimp_fish_laba_to_perceptual;
|
||||
fish_from_composite = _gimp_fish_perceptual_to_rgba;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
composite_to_blend_fish = gimp_layer_color_space_fish [composite_space - 1]
|
||||
[blend_space - 1];
|
||||
|
||||
case GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL:
|
||||
fish_to_blend = _gimp_fish_rgba_to_perceptual;
|
||||
switch (composite_space)
|
||||
{
|
||||
case GIMP_LAYER_COLOR_SPACE_LAB:
|
||||
default:
|
||||
fish_to_composite = _gimp_fish_perceptual_to_laba;
|
||||
fish_from_composite = NULL;
|
||||
break;
|
||||
case GIMP_LAYER_COLOR_SPACE_RGB_LINEAR:
|
||||
fish_to_composite = _gimp_fish_perceptual_to_rgba;
|
||||
fish_from_composite = NULL;
|
||||
break;
|
||||
case GIMP_LAYER_COLOR_SPACE_RGB_PERCEPTUAL:
|
||||
fish_to_composite = NULL;
|
||||
fish_from_composite = _gimp_fish_perceptual_to_rgba;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
blend_to_composite_fish = gimp_layer_color_space_fish [blend_space - 1]
|
||||
[composite_space - 1];
|
||||
}
|
||||
|
||||
if (in == out) /* in-place detected, avoid clobbering since we need to
|
||||
read it for the compositing stage */
|
||||
blend_out = g_alloca (sizeof (gfloat) * 4 * samples);
|
||||
|
||||
if (fish_to_blend)
|
||||
if (composite_to_blend_fish)
|
||||
{
|
||||
if (in != out || (composite_needs_in_color &&
|
||||
composite_space == GIMP_LAYER_COLOR_SPACE_RGB_LINEAR))
|
||||
if (in != out || composite_needs_in_color)
|
||||
{
|
||||
/* don't convert input in-place if we're not doing in-place output,
|
||||
* or if we're going to need the original input for compositing.
|
||||
@ -856,78 +798,44 @@ gimp_composite_blend (GimpOperationLayerMode *layer_mode,
|
||||
}
|
||||
blend_layer = g_alloca (sizeof (gfloat) * 4 * samples);
|
||||
|
||||
babl_process (fish_to_blend, in, blend_in, samples);
|
||||
babl_process (fish_to_blend, layer, blend_layer, samples);
|
||||
babl_process (composite_to_blend_fish, in, blend_in, samples);
|
||||
babl_process (composite_to_blend_fish, layer, blend_layer, samples);
|
||||
}
|
||||
|
||||
blend_func (blend_in, blend_layer, blend_out, samples);
|
||||
|
||||
composite_in = blend_in;
|
||||
composite_layer = blend_layer;
|
||||
|
||||
if (fish_to_composite)
|
||||
if (blend_to_composite_fish)
|
||||
{
|
||||
if (composite_space == GIMP_LAYER_COLOR_SPACE_RGB_LINEAR)
|
||||
{
|
||||
composite_in = in;
|
||||
composite_layer = layer;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (composite_needs_in_color)
|
||||
{
|
||||
if (composite_in == in && in != out)
|
||||
composite_in = g_alloca (sizeof (gfloat) * 4 * samples);
|
||||
|
||||
babl_process (fish_to_composite,
|
||||
blend_in, composite_in, samples);
|
||||
}
|
||||
|
||||
if (composite_needs_layer_color)
|
||||
{
|
||||
if (composite_layer == layer)
|
||||
composite_layer = g_alloca (sizeof (gfloat) * 4 * samples);
|
||||
|
||||
babl_process (fish_to_composite,
|
||||
blend_layer, composite_layer, samples);
|
||||
}
|
||||
}
|
||||
|
||||
babl_process (fish_to_composite, blend_out, blend_out, samples);
|
||||
babl_process (blend_to_composite_fish, blend_out, blend_out, samples);
|
||||
}
|
||||
|
||||
switch (composite_mode)
|
||||
{
|
||||
case GIMP_LAYER_COMPOSITE_SRC_ATOP:
|
||||
default:
|
||||
composite_func_src_atop (composite_in, blend_out, NULL,
|
||||
composite_func_src_atop (in, blend_out, NULL,
|
||||
mask, opacity,
|
||||
out, samples);
|
||||
break;
|
||||
|
||||
case GIMP_LAYER_COMPOSITE_SRC_OVER:
|
||||
composite_func_src_over (composite_in, composite_layer, blend_out,
|
||||
composite_func_src_over (in, layer, blend_out,
|
||||
mask, opacity,
|
||||
out, samples);
|
||||
break;
|
||||
|
||||
case GIMP_LAYER_COMPOSITE_DST_ATOP:
|
||||
composite_func_dst_atop (composite_in, composite_layer, blend_out,
|
||||
composite_func_dst_atop (in, layer, blend_out,
|
||||
mask, opacity,
|
||||
out, samples);
|
||||
break;
|
||||
|
||||
case GIMP_LAYER_COMPOSITE_SRC_IN:
|
||||
composite_func_src_in (composite_in, blend_out, NULL,
|
||||
composite_func_src_in (in, blend_out, NULL,
|
||||
mask, opacity,
|
||||
out, samples);
|
||||
break;
|
||||
}
|
||||
|
||||
if (fish_from_composite)
|
||||
{
|
||||
babl_process (fish_from_composite, out, out, samples);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
@ -54,7 +54,6 @@ struct _GimpOperationLayerMode
|
||||
GeglOperationPointComposer3 parent_instance;
|
||||
|
||||
GimpLayerMode layer_mode;
|
||||
gboolean linear;
|
||||
gdouble opacity;
|
||||
GimpLayerColorSpace blend_space;
|
||||
GimpLayerColorSpace composite_space;
|
||||
|
Reference in New Issue
Block a user