gboolean gimp_drawable_bucket_fill (GimpDrawable *drawable, GimpContext *context, GimpBucketFillMode fill_mode, gint paint_mode, gdouble opacity, gboolean do_seed_fill, gboolean fill_transparent, GimpSelectCriterion fill_criterion, gdouble threshold, gboolean sample_merged, gdouble x, gdouble y, GError **error) { GimpRGB color; GimpPattern *pattern = NULL; 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 (fill_mode == GIMP_FG_BUCKET_FILL) { gimp_context_get_foreground (context, &color); } else if (fill_mode == GIMP_BG_BUCKET_FILL) { gimp_context_get_background (context, &color); } else if (fill_mode == GIMP_PATTERN_BUCKET_FILL) { pattern = gimp_context_get_pattern (context); if (! pattern) { g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED, _("No patterns available for this operation.")); return FALSE; } } else { g_warning ("%s: invalid fill_mode passed", G_STRFUNC); return FALSE; } gimp_drawable_bucket_fill_full (drawable, fill_mode, paint_mode, opacity, do_seed_fill, fill_transparent, fill_criterion, threshold, sample_merged, x, y, &color, pattern); return TRUE; }
static void gimp_display_shell_dnd_bucket_fill (GimpDisplayShell *shell, GimpBucketFillMode fill_mode, const GimpRGB *color, GimpPattern *pattern) { GimpImage *image = shell->display->image; GimpDrawable *drawable; if (shell->display->gimp->busy) return; if (! image) return; drawable = gimp_image_get_active_drawable (image); if (! drawable) return; /* FIXME: there should be a virtual method for this that the * GimpTextLayer can override. */ if (color && gimp_drawable_is_text_layer (drawable)) { gimp_text_layer_set (GIMP_TEXT_LAYER (drawable), NULL, "color", color, NULL); } else { gimp_drawable_bucket_fill_full (drawable, fill_mode, GIMP_NORMAL_MODE, GIMP_OPACITY_OPAQUE, FALSE, /* no seed fill */ FALSE, /* don't fill transp */ GIMP_SELECT_CRITERION_COMPOSITE, 0.0, FALSE, /* fill params */ 0.0, 0.0, /* ignored */ color, pattern); } gimp_display_shell_dnd_flush (shell, image); }