[gimp] app: pass a GimpGradient to gimp_drawable_blend(), not a GimpBlendMode
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: pass a GimpGradient to gimp_drawable_blend(), not a GimpBlendMode
- Date: Wed, 30 Apr 2014 07:21:04 +0000 (UTC)
commit b60e1779cd41eb742cd020f509f8959cd3606398
Author: Michael Natterer <mitch gimp org>
Date: Wed Apr 30 09:17:42 2014 +0200
app: pass a GimpGradient to gimp_drawable_blend(), not a GimpBlendMode
The blend mode is now only a PDB compat enum, translate between
GimpBlendMode and the built-in gradients in the gimp-edit-blend PDB
wrapper.
app/core/gimpdrawable-blend.c | 78 +++++-----------------------------------
app/core/gimpdrawable-blend.h | 2 +-
app/pdb/edit-cmds.c | 25 ++++++++++++-
app/tools/gimpblendtool.c | 2 +-
tools/pdbgen/pdb/edit.pdb | 26 ++++++++++++-
5 files changed, 60 insertions(+), 73 deletions(-)
---
diff --git a/app/core/gimpdrawable-blend.c b/app/core/gimpdrawable-blend.c
index f3cdecc..7d3b91f 100644
--- a/app/core/gimpdrawable-blend.c
+++ b/app/core/gimpdrawable-blend.c
@@ -59,9 +59,7 @@ typedef struct
#endif
gdouble offset;
gdouble sx, sy;
- GimpBlendMode blend_mode;
GimpGradientType gradient_type;
- GimpRGB fg, bg;
gdouble dist;
gdouble vec[2];
GimpRepeatMode repeat;
@@ -145,7 +143,7 @@ static void gradient_fill_region (GimpImage *image,
GimpContext *context,
GeglBuffer *buffer,
const GeglRectangle *buffer_region,
- GimpBlendMode blend_mode,
+ GimpGradient *gradient,
GimpGradientType gradient_type,
gdouble offset,
GimpRepeatMode repeat,
@@ -166,7 +164,7 @@ static void gradient_fill_region (GimpImage *image,
void
gimp_drawable_blend (GimpDrawable *drawable,
GimpContext *context,
- GimpBlendMode blend_mode,
+ GimpGradient *gradient,
GimpLayerModeEffects paint_mode,
GimpGradientType gradient_type,
gdouble opacity,
@@ -183,13 +181,14 @@ gimp_drawable_blend (GimpDrawable *drawable,
gdouble endy,
GimpProgress *progress)
{
- GimpImage *image;
- GeglBuffer *buffer;
- gint x, y, width, height;
+ GimpImage *image;
+ GeglBuffer *buffer;
+ gint x, y, width, height;
g_return_if_fail (GIMP_IS_DRAWABLE (drawable));
g_return_if_fail (gimp_item_is_attached (GIMP_ITEM (drawable)));
g_return_if_fail (GIMP_IS_CONTEXT (context));
+ g_return_if_fail (GIMP_IS_GRADIENT (gradient));
g_return_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress));
image = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -205,7 +204,7 @@ gimp_drawable_blend (GimpDrawable *drawable,
gradient_fill_region (image, drawable, context,
buffer, GEGL_RECTANGLE (0, 0, width, height),
- blend_mode, gradient_type, offset, repeat, reverse,
+ gradient, gradient_type, offset, repeat, reverse,
supersample, max_depth, threshold, dither,
(startx - x), (starty - y),
(endx - x), (endy - y),
@@ -757,7 +756,7 @@ gradient_render_pixel (gdouble x,
color->r = color->g = color->b = 0;
color->a = GIMP_OPACITY_TRANSPARENT;
}
- else if (rbd->blend_mode == GIMP_BLEND_CUSTOM)
+ else
{
#ifdef USE_GRADIENT_CACHE
*color = rbd->gradient_cache[(gint) (factor * (rbd->gradient_cache_size - 1))];
@@ -766,25 +765,6 @@ gradient_render_pixel (gdouble x,
factor, rbd->reverse, color);
#endif
}
- else
- {
- /* Blend values */
-
- if (rbd->reverse)
- factor = 1.0 - factor;
-
- color->r = rbd->fg.r + (rbd->bg.r - rbd->fg.r) * factor;
- color->g = rbd->fg.g + (rbd->bg.g - rbd->fg.g) * factor;
- color->b = rbd->fg.b + (rbd->bg.b - rbd->fg.b) * factor;
- color->a = rbd->fg.a + (rbd->bg.a - rbd->fg.a) * factor;
-
- if (rbd->blend_mode == GIMP_BLEND_FG_BG_HSV)
- {
- GimpHSV hsv = *((GimpHSV *) color);
-
- gimp_hsv_to_rgb (&hsv, color);
- }
- }
}
static void
@@ -827,7 +807,7 @@ gradient_fill_region (GimpImage *image,
GimpContext *context,
GeglBuffer *buffer,
const GeglRectangle *buffer_region,
- GimpBlendMode blend_mode,
+ GimpGradient *gradient,
GimpGradientType gradient_type,
gdouble offset,
GimpRepeatMode repeat,
@@ -846,7 +826,7 @@ gradient_fill_region (GimpImage *image,
GIMP_TIMER_START();
- rbd.gradient = gimp_context_get_gradient (context);
+ rbd.gradient = gradient;
rbd.context = context;
rbd.reverse = reverse;
@@ -873,43 +853,6 @@ gradient_fill_region (GimpImage *image,
else
rbd.gradient = g_object_ref (rbd.gradient);
- gimp_context_get_foreground (context, &rbd.fg);
- gimp_context_get_background (context, &rbd.bg);
-
- switch (blend_mode)
- {
- case GIMP_BLEND_FG_BG_RGB:
- break;
-
- case GIMP_BLEND_FG_BG_HSV:
- /* Convert to HSV */
- {
- GimpHSV fg_hsv;
- GimpHSV bg_hsv;
-
- gimp_rgb_to_hsv (&rbd.fg, &fg_hsv);
- gimp_rgb_to_hsv (&rbd.bg, &bg_hsv);
-
- memcpy (&rbd.fg, &fg_hsv, sizeof (GimpRGB));
- memcpy (&rbd.bg, &bg_hsv, sizeof (GimpRGB));
- }
- break;
-
- case GIMP_BLEND_FG_TRANSPARENT:
- /* Color does not change, just the opacity */
-
- rbd.bg = rbd.fg;
- rbd.bg.a = GIMP_OPACITY_TRANSPARENT;
- break;
-
- case GIMP_BLEND_CUSTOM:
- break;
-
- default:
- g_assert_not_reached ();
- break;
- }
-
/* Calculate type-specific parameters */
switch (gradient_type)
@@ -958,7 +901,6 @@ gradient_fill_region (GimpImage *image,
rbd.offset = offset;
rbd.sx = sx;
rbd.sy = sy;
- rbd.blend_mode = blend_mode;
rbd.gradient_type = gradient_type;
rbd.repeat = repeat;
diff --git a/app/core/gimpdrawable-blend.h b/app/core/gimpdrawable-blend.h
index 6e333b3..f23de86 100644
--- a/app/core/gimpdrawable-blend.h
+++ b/app/core/gimpdrawable-blend.h
@@ -21,7 +21,7 @@
void gimp_drawable_blend (GimpDrawable *drawable,
GimpContext *context,
- GimpBlendMode blend_mode,
+ GimpGradient *gradient,
GimpLayerModeEffects paint_mode,
GimpGradientType gradient_type,
gdouble opacity,
diff --git a/app/pdb/edit-cmds.c b/app/pdb/edit-cmds.c
index 3f1ac61..1edf040 100644
--- a/app/pdb/edit-cmds.c
+++ b/app/pdb/edit-cmds.c
@@ -32,6 +32,7 @@
#include "pdb-types.h"
#include "core/gimp-edit.h"
+#include "core/gimp-gradients.h"
#include "core/gimp.h"
#include "core/gimpchannel.h"
#include "core/gimpdrawable-blend.h"
@@ -782,12 +783,34 @@ edit_blend_invoker (GimpProcedure *procedure,
if (success)
{
+ GimpGradient *gradient;
+
if (progress)
gimp_progress_start (progress, _("Blending"), FALSE);
+ switch (blend_mode)
+ {
+ case GIMP_BLEND_FG_BG_RGB:
+ gradient = gimp_gradients_get_fg_bg_rgb (context->gimp);
+ break;
+
+ case GIMP_BLEND_FG_BG_HSV:
+ gradient = gimp_gradients_get_fg_bg_hsv_cw (context->gimp);
+ break;
+
+ case GIMP_BLEND_FG_TRANSPARENT:
+ gradient = gimp_gradients_get_fg_transparent (context->gimp);
+ break;
+
+ case GIMP_BLEND_CUSTOM:
+ default:
+ gradient = gimp_context_get_gradient (context);
+ break;
+ }
+
gimp_drawable_blend (drawable,
context,
- blend_mode,
+ gradient,
paint_mode,
gradient_type,
opacity / 100.0,
diff --git a/app/tools/gimpblendtool.c b/app/tools/gimpblendtool.c
index ae4e2a1..9d86671 100644
--- a/app/tools/gimpblendtool.c
+++ b/app/tools/gimpblendtool.c
@@ -252,7 +252,7 @@ gimp_blend_tool_button_release (GimpTool *tool,
gimp_drawable_blend (drawable,
context,
- GIMP_BLEND_CUSTOM,
+ gimp_context_get_gradient (context),
gimp_context_get_paint_mode (context),
options->gradient_type,
gimp_context_get_opacity (context),
diff --git a/tools/pdbgen/pdb/edit.pdb b/tools/pdbgen/pdb/edit.pdb
index a25f9c4..ad153a6 100644
--- a/tools/pdbgen/pdb/edit.pdb
+++ b/tools/pdbgen/pdb/edit.pdb
@@ -838,7 +838,7 @@ HELP
);
%invoke = (
- headers => [ qw("core/gimpdrawable-blend.h") ],
+ headers => [ qw("core/gimp-gradients.h" "core/gimpdrawable-blend.h") ],
code => <<'CODE'
{
success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL,
@@ -856,12 +856,34 @@ HELP
if (success)
{
+ GimpGradient *gradient;
+
if (progress)
gimp_progress_start (progress, _("Blending"), FALSE);
+ switch (blend_mode)
+ {
+ case GIMP_BLEND_FG_BG_RGB:
+ gradient = gimp_gradients_get_fg_bg_rgb (context->gimp);
+ break;
+
+ case GIMP_BLEND_FG_BG_HSV:
+ gradient = gimp_gradients_get_fg_bg_hsv_cw (context->gimp);
+ break;
+
+ case GIMP_BLEND_FG_TRANSPARENT:
+ gradient = gimp_gradients_get_fg_transparent (context->gimp);
+ break;
+
+ case GIMP_BLEND_CUSTOM:
+ default:
+ gradient = gimp_context_get_gradient (context);
+ break;
+ }
+
gimp_drawable_blend (drawable,
context,
- blend_mode,
+ gradient,
paint_mode,
gradient_type,
opacity / 100.0,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]