app: fix GimpOperationReplaceMode to not do two things different than legacy

This commit is contained in:
Michael Natterer
2012-05-01 04:11:16 +02:00
parent 64a4ec12d5
commit b9db13e4fc

View File

@ -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;