diff --git a/app/core/gimpdrawable-bucket-fill.c b/app/core/gimpdrawable-bucket-fill.c index d1058b16fb..50886fc9ab 100644 --- a/app/core/gimpdrawable-bucket-fill.c +++ b/app/core/gimpdrawable-bucket-fill.c @@ -59,6 +59,7 @@ gimp_drawable_bucket_fill (GimpDrawable *drawable, GimpPickable *pickable; GeglBuffer *buffer; GeglBuffer *mask_buffer; + gboolean antialias; gint x1, y1, x2, y2; gint mask_offset_x = 0; gint mask_offset_y = 0; @@ -84,11 +85,13 @@ gimp_drawable_bucket_fill (GimpDrawable *drawable, else pickable = GIMP_PICKABLE (drawable); + antialias = gimp_fill_options_get_antialias (options); + /* Do a seed bucket fill...To do this, calculate a new * contiguous region. */ mask_buffer = gimp_pickable_contiguous_region_by_seed (pickable, - TRUE, + antialias, threshold, fill_transparent, fill_criterion, diff --git a/app/tools/gimpbucketfilloptions.c b/app/tools/gimpbucketfilloptions.c index b7189eae0f..9f4b87eb85 100644 --- a/app/tools/gimpbucketfilloptions.c +++ b/app/tools/gimpbucketfilloptions.c @@ -51,6 +51,7 @@ enum PROP_FILL_TRANSPARENT, PROP_SAMPLE_MERGED, PROP_DIAGONAL_NEIGHBORS, + PROP_ANTIALIAS, PROP_THRESHOLD, PROP_FILL_CRITERION }; @@ -95,12 +96,14 @@ gimp_bucket_fill_options_class_init (GimpBucketFillOptionsClass *klass) GIMP_TYPE_BUCKET_FILL_MODE, GIMP_BUCKET_FILL_FG, GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_FILL_SELECTION, "fill-selection", _("Fill selection"), _("Which area will be filled"), FALSE, GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_FILL_TRANSPARENT, "fill-transparent", _("Fill transparent areas"), @@ -108,12 +111,14 @@ gimp_bucket_fill_options_class_init (GimpBucketFillOptionsClass *klass) "to be filled"), TRUE, GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SAMPLE_MERGED, "sample-merged", _("Sample merged"), _("Base filled area on all visible layers"), FALSE, GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_DIAGONAL_NEIGHBORS, "diagonal-neighbors", _("Diagonal neighbors"), @@ -121,12 +126,24 @@ gimp_bucket_fill_options_class_init (GimpBucketFillOptionsClass *klass) "connected"), FALSE, GIMP_PARAM_STATIC_STRINGS); + + GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_ANTIALIAS, + "antialias", + _("Antialiasing"), + _("Base fill opacity on color difference from " + "the clicked pixel (see threshold). Disable " + "antialiasing to fill the entire area " + "uniformly."), + TRUE, + GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_THRESHOLD, "threshold", _("Threshold"), _("Maximum color difference"), 0.0, 255.0, 15.0, GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_PROP_ENUM (object_class, PROP_FILL_CRITERION, "fill-criterion", _("Fill by"), @@ -174,6 +191,9 @@ gimp_bucket_fill_options_set_property (GObject *object, case PROP_DIAGONAL_NEIGHBORS: options->diagonal_neighbors = g_value_get_boolean (value); break; + case PROP_ANTIALIAS: + options->antialias = g_value_get_boolean (value); + break; case PROP_THRESHOLD: options->threshold = g_value_get_double (value); break; @@ -212,6 +232,9 @@ gimp_bucket_fill_options_get_property (GObject *object, case PROP_DIAGONAL_NEIGHBORS: g_value_set_boolean (value, options->diagonal_neighbors); break; + case PROP_ANTIALIAS: + g_value_set_boolean (value, options->antialias); + break; case PROP_THRESHOLD: g_value_set_double (value, options->threshold); break; @@ -314,6 +337,11 @@ gimp_bucket_fill_options_gui (GimpToolOptions *tool_options) gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0); gtk_widget_show (button); + /* the antialias toggle */ + button = gimp_prop_check_button_new (config, "antialias", NULL); + gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0); + gtk_widget_show (button); + /* the threshold scale */ scale = gimp_prop_spin_scale_new (config, "threshold", NULL, 1.0, 16.0, 1); diff --git a/app/tools/gimpbucketfilloptions.h b/app/tools/gimpbucketfilloptions.h index 083feefe57..7a0d27b084 100644 --- a/app/tools/gimpbucketfilloptions.h +++ b/app/tools/gimpbucketfilloptions.h @@ -42,6 +42,7 @@ struct _GimpBucketFillOptions gboolean fill_transparent; gboolean sample_merged; gboolean diagonal_neighbors; + gboolean antialias; gdouble threshold; GimpSelectCriterion fill_criterion; }; diff --git a/app/tools/gimpbucketfilltool.c b/app/tools/gimpbucketfilltool.c index b266a976cb..aa5d163e8c 100644 --- a/app/tools/gimpbucketfilltool.c +++ b/app/tools/gimpbucketfilltool.c @@ -182,6 +182,8 @@ gimp_bucket_fill_tool_button_release (GimpTool *tool, options->fill_mode, &error)) { + gimp_fill_options_set_antialias (fill_options, options->antialias); + gimp_context_set_opacity (GIMP_CONTEXT (fill_options), gimp_context_get_opacity (context)); gimp_context_set_paint_mode (GIMP_CONTEXT (fill_options),