app: fix GimpOperationReplaceMode to not do two things different than legacy
This commit is contained in:
@ -174,23 +174,24 @@ gimp_operation_replace_mode_process (GeglOperation *operation,
|
|||||||
gfloat *mask = aux2_buf;
|
gfloat *mask = aux2_buf;
|
||||||
gfloat *out = out_buf;
|
gfloat *out = out_buf;
|
||||||
|
|
||||||
|
|
||||||
while (samples--)
|
while (samples--)
|
||||||
{
|
{
|
||||||
gint b;
|
gint b;
|
||||||
gfloat new_alpha;
|
gfloat new_alpha;
|
||||||
|
|
||||||
|
if (mask)
|
||||||
|
new_alpha = (layer[ALPHA] - in[ALPHA]) * (*mask) * opacity + in[ALPHA];
|
||||||
|
else
|
||||||
|
new_alpha = (layer[ALPHA] - in[ALPHA]) * opacity + in[ALPHA];
|
||||||
|
|
||||||
|
if (new_alpha)
|
||||||
|
{
|
||||||
gfloat ratio;
|
gfloat ratio;
|
||||||
|
|
||||||
if (mask)
|
if (mask)
|
||||||
{
|
ratio = *mask * opacity * layer[ALPHA] / new_alpha;
|
||||||
new_alpha = (layer[ALPHA] - in[ALPHA]) * (*mask) * opacity + in[ALPHA];
|
|
||||||
ratio = *mask * opacity / layer[ALPHA] / new_alpha;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
ratio = opacity * layer[ALPHA] / new_alpha;
|
||||||
new_alpha = (layer[ALPHA] - in[ALPHA]) * opacity + in[ALPHA];
|
|
||||||
ratio = opacity / layer[ALPHA] / new_alpha;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (b = RED; b < ALPHA; b++)
|
for (b = RED; b < ALPHA; b++)
|
||||||
{
|
{
|
||||||
@ -207,6 +208,12 @@ gimp_operation_replace_mode_process (GeglOperation *operation,
|
|||||||
out[b] = in[b] - t;
|
out[b] = in[b] - t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (b = RED; b < ALPHA; b++)
|
||||||
|
out[b] = in[b];
|
||||||
|
}
|
||||||
|
|
||||||
out[ALPHA] = new_alpha;
|
out[ALPHA] = new_alpha;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user