From 01b25baffd87f1e57aed52b4aeebcbb9cb39642e Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Wed, 11 Jan 2017 12:38:58 +0100 Subject: [PATCH] app: change mask handling in GimpOperationReplaceMode to be like in the other modes, and proably speed it up a little. --- app/operations/gimpoperationreplacemode.c | 24 +++++++++++------------ 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/app/operations/gimpoperationreplacemode.c b/app/operations/gimpoperationreplacemode.c index 63911850f5..46d7dbb5f7 100644 --- a/app/operations/gimpoperationreplacemode.c +++ b/app/operations/gimpoperationreplacemode.c @@ -88,24 +88,22 @@ gimp_operation_replace_mode_process_pixels (gfloat *in, const GeglRectangle *roi, gint level) { + const gboolean has_mask = mask != NULL; + while (samples--) { - gint b; + gfloat opacity_value = opacity; gfloat new_alpha; + gint b; - if (mask) - new_alpha = (layer[ALPHA] - in[ALPHA]) * (*mask) * opacity + in[ALPHA]; - else - new_alpha = (layer[ALPHA] - in[ALPHA]) * opacity + in[ALPHA]; + if (has_mask) + opacity_value *= *mask; + + new_alpha = (layer[ALPHA] - in[ALPHA]) * opacity_value + in[ALPHA]; if (new_alpha) { - gfloat ratio; - - if (mask) - ratio = *mask * opacity * layer[ALPHA] / new_alpha; - else - ratio = opacity * layer[ALPHA] / new_alpha; + gfloat ratio = opacity_value * layer[ALPHA] / new_alpha; for (b = RED; b < ALPHA; b++) { @@ -135,8 +133,8 @@ gimp_operation_replace_mode_process_pixels (gfloat *in, layer += 4; out += 4; - if (mask) - mask += 1; + if (has_mask) + mask++; } return TRUE;