[gimp] app: change gimp_drawable_bucket_fill() to use GimpFillOptions
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: change gimp_drawable_bucket_fill() to use GimpFillOptions
- Date: Fri, 11 Mar 2016 21:05:52 +0000 (UTC)
commit d71f53dfe9053c444e9239eb4aeaa1afbe3f6eb0
Author: Michael Natterer <mitch gimp org>
Date: Fri Mar 11 22:03:32 2016 +0100
app: change gimp_drawable_bucket_fill() to use GimpFillOptions
and get rid of gimp_drawable_bucket_fill_internal().
app/core/gimpdrawable-bucket-fill.c | 119 ++++++++------------------------
app/core/gimpdrawable-bucket-fill.h | 22 +++----
app/pdb/edit-cmds.c | 128 +++++++++++-----------------------
app/tools/gimpbucketfilltool.c | 96 +++++++++++---------------
tools/pdbgen/pdb/edit.pdb | 129 ++++++++++++-----------------------
5 files changed, 164 insertions(+), 330 deletions(-)
---
diff --git a/app/core/gimpdrawable-bucket-fill.c b/app/core/gimpdrawable-bucket-fill.c
index 35bb048..daa30eb 100644
--- a/app/core/gimpdrawable-bucket-fill.c
+++ b/app/core/gimpdrawable-bucket-fill.c
@@ -39,6 +39,7 @@
#include "gimpcontext.h"
#include "gimpdrawable.h"
#include "gimpdrawable-bucket-fill.h"
+#include "gimpfilloptions.h"
#include "gimpimage.h"
#include "gimppattern.h"
#include "gimppickable.h"
@@ -47,85 +48,25 @@
#include "gimp-intl.h"
-static void gimp_drawable_bucket_fill_internal (GimpDrawable *drawable,
- GimpFillType fill_type,
- gint paint_mode,
- gdouble opacity,
- gboolean fill_transparent,
- GimpSelectCriterion fill_criterion,
- gdouble threshold,
- gboolean sample_merged,
- gboolean diagonal_neighbors,
- gdouble x,
- gdouble y,
- const GimpRGB *color,
- GimpPattern *pattern);
-
-
/* public functions */
-gboolean
+void
gimp_drawable_bucket_fill (GimpDrawable *drawable,
- GimpContext *context,
- GimpFillType fill_type,
- gint paint_mode,
- gdouble opacity,
+ GimpFillOptions *options,
gboolean fill_transparent,
GimpSelectCriterion fill_criterion,
gdouble threshold,
gboolean sample_merged,
gboolean diagonal_neighbors,
gdouble x,
- gdouble y,
- GError **error)
-{
- GimpPattern *pattern;
- GimpRGB color;
-
- g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), FALSE);
- g_return_val_if_fail (gimp_item_is_attached (GIMP_ITEM (drawable)), FALSE);
- g_return_val_if_fail (GIMP_IS_CONTEXT (context), FALSE);
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
- if (! gimp_get_fill_params (context, fill_type, &color, &pattern, error))
- return FALSE;
-
- gimp_palettes_add_color_history (context->gimp,
- &color);
-
- gimp_drawable_bucket_fill_internal (drawable,
- fill_type,
- paint_mode, opacity,
- fill_transparent, fill_criterion,
- threshold, sample_merged,
- diagonal_neighbors, x, y,
- &color, pattern);
-
- return TRUE;
-}
-
-
-/* private functions */
-
-static void
-gimp_drawable_bucket_fill_internal (GimpDrawable *drawable,
- GimpFillType fill_type,
- gint paint_mode,
- gdouble opacity,
- gboolean fill_transparent,
- GimpSelectCriterion fill_criterion,
- gdouble threshold,
- gboolean sample_merged,
- gboolean diagonal_neighbors,
- gdouble x,
- gdouble y,
- const GimpRGB *color,
- GimpPattern *pattern)
+ gdouble y)
{
GimpImage *image;
GimpPickable *pickable;
GeglBuffer *buffer;
GeglBuffer *mask_buffer;
+ GimpPattern *pattern = NULL;
+ GimpRGB color;
gint x1, y1, x2, y2;
gint mask_offset_x = 0;
gint mask_offset_y = 0;
@@ -133,10 +74,7 @@ gimp_drawable_bucket_fill_internal (GimpDrawable *drawable,
g_return_if_fail (GIMP_IS_DRAWABLE (drawable));
g_return_if_fail (gimp_item_is_attached (GIMP_ITEM (drawable)));
- g_return_if_fail (fill_type != GIMP_FILL_PATTERN ||
- GIMP_IS_PATTERN (pattern));
- g_return_if_fail (fill_type == GIMP_FILL_PATTERN ||
- color != NULL);
+ g_return_if_fail (GIMP_IS_FILL_OPTIONS (options));
image = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -216,30 +154,34 @@ gimp_drawable_bucket_fill_internal (GimpDrawable *drawable,
buffer = gegl_buffer_new (GEGL_RECTANGLE (0, 0, x2 - x1, y2 - y1),
gimp_drawable_get_format_with_alpha (drawable));
- switch (fill_type)
+ switch (gimp_fill_options_get_style (options))
{
- case GIMP_FILL_FOREGROUND:
- case GIMP_FILL_BACKGROUND:
- case GIMP_FILL_WHITE:
- case GIMP_FILL_TRANSPARENT:
- {
- GeglColor *gegl_color = gimp_gegl_color_new (color);
-
- gegl_buffer_set_color (buffer, NULL, gegl_color);
- g_object_unref (gegl_color);
- }
+ case GIMP_FILL_STYLE_SOLID:
+ gimp_context_get_foreground (GIMP_CONTEXT (options), &color);
break;
- case GIMP_FILL_PATTERN:
- {
- GeglBuffer *pattern_buffer = gimp_pattern_create_buffer (pattern);
-
- gegl_buffer_set_pattern (buffer, NULL, pattern_buffer, -x1, -y1);
- g_object_unref (pattern_buffer);
- }
+ case GIMP_FILL_STYLE_PATTERN:
+ pattern = gimp_context_get_pattern (GIMP_CONTEXT (options));
break;
}
+ if (pattern)
+ {
+ GeglBuffer *pattern_buffer = gimp_pattern_create_buffer (pattern);
+
+ gegl_buffer_set_pattern (buffer, NULL, pattern_buffer, -x1, -y1);
+ g_object_unref (pattern_buffer);
+ }
+ else
+ {
+ GeglColor *gegl_color = gimp_gegl_color_new (&color);
+
+ gegl_buffer_set_color (buffer, NULL, gegl_color);
+ g_object_unref (gegl_color);
+
+ gimp_palettes_add_color_history (image->gimp, &color);
+ }
+
gimp_gegl_apply_opacity (buffer, NULL, NULL, buffer,
mask_buffer,
-mask_offset_x,
@@ -251,7 +193,8 @@ gimp_drawable_bucket_fill_internal (GimpDrawable *drawable,
gimp_drawable_apply_buffer (drawable, buffer,
GEGL_RECTANGLE (0, 0, x2 - x1, y2 - y1),
TRUE, C_("undo-type", "Bucket Fill"),
- opacity, paint_mode,
+ gimp_context_get_opacity (GIMP_CONTEXT (options)),
+ gimp_context_get_paint_mode (GIMP_CONTEXT (options)),
NULL, x1, y1);
g_object_unref (buffer);
diff --git a/app/core/gimpdrawable-bucket-fill.h b/app/core/gimpdrawable-bucket-fill.h
index 2e2cf2b..08e04fe 100644
--- a/app/core/gimpdrawable-bucket-fill.h
+++ b/app/core/gimpdrawable-bucket-fill.h
@@ -19,19 +19,15 @@
#define __GIMP_DRAWABLE_BUCKET_FILL_H__
-gboolean gimp_drawable_bucket_fill (GimpDrawable *drawable,
- GimpContext *context,
- GimpFillType fill_type,
- gint paint_mode,
- gdouble opacity,
- gboolean fill_transparent,
- GimpSelectCriterion fill_criterion,
- gdouble threshold,
- gboolean sample_merged,
- gboolean diagonal_neighbors,
- gdouble x,
- gdouble y,
- GError **error);
+void gimp_drawable_bucket_fill (GimpDrawable *drawable,
+ GimpFillOptions *options,
+ gboolean fill_transparent,
+ GimpSelectCriterion fill_criterion,
+ gdouble threshold,
+ gboolean sample_merged,
+ gboolean diagonal_neighbors,
+ gdouble x,
+ gdouble y);
#endif /* __GIMP_DRAWABLE_BUCKET_FILL_H__ */
diff --git a/app/pdb/edit-cmds.c b/app/pdb/edit-cmds.c
index dbe3236..24b1d58 100644
--- a/app/pdb/edit-cmds.c
+++ b/app/pdb/edit-cmds.c
@@ -19,8 +19,6 @@
#include "config.h"
-#include <string.h>
-
#include <gegl.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
@@ -605,58 +603,37 @@ edit_bucket_fill_invoker (GimpProcedure *procedure,
GIMP_PDB_ITEM_CONTENT, error) &&
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
{
- GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
-
- if (paint_mode == GIMP_OVERLAY_MODE)
- paint_mode = GIMP_SOFTLIGHT_MODE;
+ GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
+ GimpFillOptions *options = gimp_fill_options_new (gimp);
- if (! gimp_channel_is_empty (gimp_image_get_mask (image)))
+ if (gimp_fill_options_set_by_fill_mode (options, context,
+ fill_mode, error))
{
- GimpFillOptions *options = gimp_fill_options_new (gimp);
+ if (paint_mode == GIMP_OVERLAY_MODE)
+ paint_mode = GIMP_SOFTLIGHT_MODE;
- success = gimp_fill_options_set_by_fill_mode (options, context,
- fill_mode, error);
+ gimp_context_set_opacity (GIMP_CONTEXT (options), opacity / 100.0);
+ gimp_context_set_paint_mode (GIMP_CONTEXT (options), paint_mode);
- if (success)
+ if (! gimp_channel_is_empty (gimp_image_get_mask (image)))
{
- gimp_context_set_opacity (GIMP_CONTEXT (options), opacity / 100.0);
- gimp_context_set_paint_mode (GIMP_CONTEXT (options), paint_mode);
-
success = gimp_edit_fill (image, drawable, options, NULL);
}
-
- g_object_unref (options);
+ else
+ {
+ gimp_drawable_bucket_fill (drawable, options,
+ FALSE /* don't fill transparent */,
+ GIMP_SELECT_CRITERION_COMPOSITE,
+ threshold / 255.0,
+ sample_merged,
+ FALSE /* no diagonal neighbors */,
+ x, y);
+ }
}
else
- {
- GimpFillType fill_type;
-
- switch (fill_mode)
- {
- default:
- case GIMP_BUCKET_FILL_FG:
- fill_type = GIMP_FILL_FOREGROUND;
- break;
-
- case GIMP_BUCKET_FILL_BG:
- fill_type = GIMP_FILL_BACKGROUND;
- break;
-
- case GIMP_BUCKET_FILL_PATTERN:
- fill_type = GIMP_FILL_PATTERN;
- break;
- }
+ success = FALSE;
- success = gimp_drawable_bucket_fill (drawable, context, fill_type,
- paint_mode, opacity / 100.0,
- FALSE /* don't fill transparent */,
- GIMP_SELECT_CRITERION_COMPOSITE,
- threshold / 255.0,
- sample_merged,
- FALSE /* no diagonal neighbors */,
- x, y,
- error);
- }
+ g_object_unref (options);
}
else
success = FALSE;
@@ -703,58 +680,37 @@ edit_bucket_fill_full_invoker (GimpProcedure *procedure,
GIMP_PDB_ITEM_CONTENT, error) &&
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
{
- GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
-
- if (paint_mode == GIMP_OVERLAY_MODE)
- paint_mode = GIMP_SOFTLIGHT_MODE;
+ GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
+ GimpFillOptions *options = gimp_fill_options_new (gimp);
- if (! gimp_channel_is_empty (gimp_image_get_mask (image)))
+ if (gimp_fill_options_set_by_fill_mode (options, context,
+ fill_mode, error))
{
- GimpFillOptions *options = gimp_fill_options_new (gimp);
+ if (paint_mode == GIMP_OVERLAY_MODE)
+ paint_mode = GIMP_SOFTLIGHT_MODE;
- success = gimp_fill_options_set_by_fill_mode (options, context,
- fill_mode, error);
+ gimp_context_set_opacity (GIMP_CONTEXT (options), opacity / 100.0);
+ gimp_context_set_paint_mode (GIMP_CONTEXT (options), paint_mode);
- if (success)
+ if (! gimp_channel_is_empty (gimp_image_get_mask (image)))
{
- gimp_context_set_opacity (GIMP_CONTEXT (options), opacity / 100.0);
- gimp_context_set_paint_mode (GIMP_CONTEXT (options), paint_mode);
-
success = gimp_edit_fill (image, drawable, options, NULL);
}
-
- g_object_unref (options);
+ else
+ {
+ gimp_drawable_bucket_fill (drawable, options,
+ fill_transparent,
+ select_criterion,
+ threshold / 255.0,
+ sample_merged,
+ FALSE /* no diagonal neighbors */,
+ x, y);
+ }
}
else
- {
- GimpFillType fill_type;
-
- switch (fill_mode)
- {
- default:
- case GIMP_BUCKET_FILL_FG:
- fill_type = GIMP_FILL_FOREGROUND;
- break;
-
- case GIMP_BUCKET_FILL_BG:
- fill_type = GIMP_FILL_BACKGROUND;
- break;
-
- case GIMP_BUCKET_FILL_PATTERN:
- fill_type = GIMP_FILL_PATTERN;
- break;
- }
+ success = FALSE;
- success = gimp_drawable_bucket_fill (drawable, context, fill_type,
- paint_mode, opacity / 100.0,
- fill_transparent,
- select_criterion,
- threshold / 255.0,
- sample_merged,
- FALSE /* no diagonal neighbors */,
- x, y,
- error);
- }
+ g_object_unref (options);
}
else
success = FALSE;
diff --git a/app/tools/gimpbucketfilltool.c b/app/tools/gimpbucketfilltool.c
index 8d30364..b0a20c6 100644
--- a/app/tools/gimpbucketfilltool.c
+++ b/app/tools/gimpbucketfilltool.c
@@ -172,74 +172,56 @@ gimp_bucket_fill_tool_button_release (GimpTool *tool,
gimp_image_coords_in_active_pickable (image, coords,
options->sample_merged, TRUE))
{
- GimpDrawable *drawable = gimp_image_get_active_drawable (image);
- GimpContext *context = GIMP_CONTEXT (options);
- gboolean success;
- GError *error = NULL;
-
- if (options->fill_selection)
- {
- GimpFillOptions *fill_options = gimp_fill_options_new (image->gimp);
+ GimpDrawable *drawable = gimp_image_get_active_drawable (image);
+ GimpContext *context = GIMP_CONTEXT (options);
+ GimpFillOptions *fill_options;
+ gboolean success;
+ GError *error = NULL;
- success = gimp_fill_options_set_by_fill_mode (fill_options, context,
- options->fill_mode,
- &error);
+ fill_options = gimp_fill_options_new (image->gimp);
- if (success)
- {
- gimp_context_set_opacity (GIMP_CONTEXT (fill_options),
- gimp_context_get_opacity (context));
- gimp_context_set_paint_mode (GIMP_CONTEXT (fill_options),
- gimp_context_get_paint_mode (context));
-
- success = gimp_edit_fill (image, drawable, fill_options, NULL);
- }
+ success = gimp_fill_options_set_by_fill_mode (fill_options, context,
+ options->fill_mode,
+ &error);
- g_object_unref (fill_options);
- }
- else
+ if (success)
{
- GimpFillType fill_type;
- gint x, y;
-
- x = coords->x;
- y = coords->y;
+ gimp_context_set_opacity (GIMP_CONTEXT (fill_options),
+ gimp_context_get_opacity (context));
+ gimp_context_set_paint_mode (GIMP_CONTEXT (fill_options),
+ gimp_context_get_paint_mode (context));
- switch (options->fill_mode)
+ if (options->fill_selection)
{
- default:
- case GIMP_BUCKET_FILL_FG:
- fill_type = GIMP_FILL_FOREGROUND;
- break;
- case GIMP_BUCKET_FILL_BG:
- fill_type = GIMP_FILL_BACKGROUND;
- break;
- case GIMP_BUCKET_FILL_PATTERN:
- fill_type = GIMP_FILL_PATTERN;
- break;
+ success = gimp_edit_fill (image, drawable, fill_options, NULL);
}
-
- if (! options->sample_merged)
+ else
{
- gint off_x, off_y;
-
- gimp_item_get_offset (GIMP_ITEM (drawable), &off_x, &off_y);
-
- x -= off_x;
- y -= off_y;
+ gint x = coords->x;
+ gint y = coords->y;
+
+ if (! options->sample_merged)
+ {
+ gint off_x, off_y;
+
+ gimp_item_get_offset (GIMP_ITEM (drawable), &off_x, &off_y);
+
+ x -= off_x;
+ y -= off_y;
+ }
+
+ gimp_drawable_bucket_fill (drawable, fill_options,
+ options->fill_transparent,
+ options->fill_criterion,
+ options->threshold / 255.0,
+ options->sample_merged,
+ options->diagonal_neighbors,
+ x, y);
}
-
- success = gimp_drawable_bucket_fill (drawable, context, fill_type,
- gimp_context_get_paint_mode (context),
- gimp_context_get_opacity (context),
- options->fill_transparent,
- options->fill_criterion,
- options->threshold / 255.0,
- options->sample_merged,
- options->diagonal_neighbors,
- x, y, &error);
}
+ g_object_unref (fill_options);
+
if (success)
{
gimp_image_flush (image);
diff --git a/tools/pdbgen/pdb/edit.pdb b/tools/pdbgen/pdb/edit.pdb
index 5d889ca..96b08e7 100644
--- a/tools/pdbgen/pdb/edit.pdb
+++ b/tools/pdbgen/pdb/edit.pdb
@@ -641,58 +641,37 @@ HELP
GIMP_PDB_ITEM_CONTENT, error) &&
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
{
- GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
-
- if (paint_mode == GIMP_OVERLAY_MODE)
- paint_mode = GIMP_SOFTLIGHT_MODE;
+ GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
+ GimpFillOptions *options = gimp_fill_options_new (gimp);
- if (! gimp_channel_is_empty (gimp_image_get_mask (image)))
+ if (gimp_fill_options_set_by_fill_mode (options, context,
+ fill_mode, error))
{
- GimpFillOptions *options = gimp_fill_options_new (gimp);
+ if (paint_mode == GIMP_OVERLAY_MODE)
+ paint_mode = GIMP_SOFTLIGHT_MODE;
- success = gimp_fill_options_set_by_fill_mode (options, context,
- fill_mode, error);
+ gimp_context_set_opacity (GIMP_CONTEXT (options), opacity / 100.0);
+ gimp_context_set_paint_mode (GIMP_CONTEXT (options), paint_mode);
- if (success)
+ if (! gimp_channel_is_empty (gimp_image_get_mask (image)))
{
- gimp_context_set_opacity (GIMP_CONTEXT (options), opacity / 100.0);
- gimp_context_set_paint_mode (GIMP_CONTEXT (options), paint_mode);
-
success = gimp_edit_fill (image, drawable, options, NULL);
}
-
- g_object_unref (options);
+ else
+ {
+ gimp_drawable_bucket_fill (drawable, options,
+ FALSE /* don't fill transparent */,
+ GIMP_SELECT_CRITERION_COMPOSITE,
+ threshold / 255.0,
+ sample_merged,
+ FALSE /* no diagonal neighbors */,
+ x, y);
+ }
}
else
- {
- GimpFillType fill_type;
-
- switch (fill_mode)
- {
- default:
- case GIMP_BUCKET_FILL_FG:
- fill_type = GIMP_FILL_FOREGROUND;
- break;
-
- case GIMP_BUCKET_FILL_BG:
- fill_type = GIMP_FILL_BACKGROUND;
- break;
-
- case GIMP_BUCKET_FILL_PATTERN:
- fill_type = GIMP_FILL_PATTERN;
- break;
- }
+ success = FALSE;
- success = gimp_drawable_bucket_fill (drawable, context, fill_type,
- paint_mode, opacity / 100.0,
- FALSE /* don't fill transparent */,
- GIMP_SELECT_CRITERION_COMPOSITE,
- threshold / 255.0,
- sample_merged,
- FALSE /* no diagonal neighbors */,
- x, y,
- error);
- }
+ g_object_unref (options);
}
else
success = FALSE;
@@ -767,58 +746,37 @@ HELP
GIMP_PDB_ITEM_CONTENT, error) &&
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
{
- GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
-
- if (paint_mode == GIMP_OVERLAY_MODE)
- paint_mode = GIMP_SOFTLIGHT_MODE;
+ GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
+ GimpFillOptions *options = gimp_fill_options_new (gimp);
- if (! gimp_channel_is_empty (gimp_image_get_mask (image)))
+ if (gimp_fill_options_set_by_fill_mode (options, context,
+ fill_mode, error))
{
- GimpFillOptions *options = gimp_fill_options_new (gimp);
+ if (paint_mode == GIMP_OVERLAY_MODE)
+ paint_mode = GIMP_SOFTLIGHT_MODE;
- success = gimp_fill_options_set_by_fill_mode (options, context,
- fill_mode, error);
+ gimp_context_set_opacity (GIMP_CONTEXT (options), opacity / 100.0);
+ gimp_context_set_paint_mode (GIMP_CONTEXT (options), paint_mode);
- if (success)
+ if (! gimp_channel_is_empty (gimp_image_get_mask (image)))
{
- gimp_context_set_opacity (GIMP_CONTEXT (options), opacity / 100.0);
- gimp_context_set_paint_mode (GIMP_CONTEXT (options), paint_mode);
-
success = gimp_edit_fill (image, drawable, options, NULL);
}
-
- g_object_unref (options);
+ else
+ {
+ gimp_drawable_bucket_fill (drawable, options,
+ fill_transparent,
+ select_criterion,
+ threshold / 255.0,
+ sample_merged,
+ FALSE /* no diagonal neighbors */,
+ x, y);
+ }
}
else
- {
- GimpFillType fill_type;
-
- switch (fill_mode)
- {
- default:
- case GIMP_BUCKET_FILL_FG:
- fill_type = GIMP_FILL_FOREGROUND;
- break;
-
- case GIMP_BUCKET_FILL_BG:
- fill_type = GIMP_FILL_BACKGROUND;
- break;
-
- case GIMP_BUCKET_FILL_PATTERN:
- fill_type = GIMP_FILL_PATTERN;
- break;
- }
+ success = FALSE;
- success = gimp_drawable_bucket_fill (drawable, context, fill_type,
- paint_mode, opacity / 100.0,
- fill_transparent,
- select_criterion,
- threshold / 255.0,
- sample_merged,
- FALSE /* no diagonal neighbors */,
- x, y,
- error);
- }
+ g_object_unref (options);
}
else
success = FALSE;
@@ -1043,8 +1001,7 @@ CODE
}
- headers = qw(<string.h>
- "libgimpconfig/gimpconfig.h"
+ headers = qw("libgimpconfig/gimpconfig.h"
"core/gimp.h"
"core/gimp-edit.h"
"core/gimpimage.h"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]