[gimp/wip/gradient-edit: 33/35] app: implement blend tool gui for gradient midpoints
- From: N/A <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/wip/gradient-edit: 33/35] app: implement blend tool gui for gradient midpoints
- Date: Fri, 4 Aug 2017 14:52:32 +0000 (UTC)
commit 81ea1ae7087f0775da4dc4e061ebb2d8c93f0ede
Author: Ell <ell_se yahoo com>
Date: Thu Aug 3 13:42:09 2017 -0400
app: implement blend tool gui for gradient midpoints
Allows setting the midpoint's position, blending function, and
coloring type.
The midpoint can be converted to a stop, and centered, through
editor buttons.
app/tools/gimpblendtool-editor.c | 502 ++++++++++++++++++++++++++++++++------
app/tools/gimpblendtool.h | 5 +
libgimpbase/gimpbaseenums.c | 16 +-
libgimpbase/gimpbaseenums.h | 16 +-
4 files changed, 447 insertions(+), 92 deletions(-)
---
diff --git a/app/tools/gimpblendtool-editor.c b/app/tools/gimpblendtool-editor.c
index 5b8e40e..60f9544 100644
--- a/app/tools/gimpblendtool-editor.c
+++ b/app/tools/gimpblendtool-editor.c
@@ -63,76 +63,95 @@ typedef enum
/* local function prototypes */
-static gboolean gimp_blend_tool_editor_line_can_add_slider (GimpToolLine
*line,
- gdouble
value,
- GimpBlendTool
*blend_tool);
-static gint gimp_blend_tool_editor_line_add_slider (GimpToolLine
*line,
- gdouble
value,
- GimpBlendTool
*blend_tool);
-static void gimp_blend_tool_editor_line_remove_slider (GimpToolLine
*line,
- gint
slider,
- GimpBlendTool
*blend_tool);
-static void gimp_blend_tool_editor_line_selection_changed (GimpToolLine
*line,
- GimpBlendTool
*blend_tool);
-static gboolean gimp_blend_tool_editor_line_handle_clicked (GimpToolLine
*line,
- gint
handle,
- GdkModifierType
state,
- GimpButtonPressType
press_type,
- GimpBlendTool
*blend_tool);
-
-static void gimp_blend_tool_editor_gui_response (GimpToolGui *gui,
- gint
response_id,
- GimpBlendTool
*blend_tool);
-
-static void gimp_blend_tool_editor_color_entry_color_changed (GimpColorButton
*button,
- GimpBlendTool
*blend_tool);
-
-static void gimp_blend_tool_editor_color_entry_type_changed (GtkComboBox
*combo,
- GimpBlendTool
*blend_tool);
-
-static void gimp_blend_tool_editor_endpoint_se_value_changed (GimpSizeEntry *se,
- GimpBlendTool
*blend_tool);
-
-static void gimp_blend_tool_editor_stop_spinbutton_value_changed (GtkAdjustment
*adjustment,
- GimpBlendTool
*blend_tool);
-
-static void gimp_blend_tool_editor_stop_delete_clicked (GtkWidget
*button,
- GimpBlendTool
*blend_tool);
-
-static gboolean gimp_blend_tool_editor_is_gradient_editable (GimpBlendTool
*blend_tool);
-
-static gboolean gimp_blend_tool_editor_handle_is_endpoint (GimpBlendTool
*blend_tool,
- gint
handle);
-static gboolean gimp_blend_tool_editor_handle_is_stop (GimpBlendTool
*blend_tool,
- gint
handle);
-static gboolean gimp_blend_tool_editor_handle_is_midpoint (GimpBlendTool
*blend_tool,
- gint
handle);
-static GimpGradientSegment * gimp_blend_tool_editor_handle_get_segment (GimpBlendTool
*blend_tool,
- gint
handle);
-
-static void gimp_blend_tool_editor_freeze_gradient (GimpBlendTool
*blend_tool);
-static void gimp_blend_tool_editor_thaw_gradient (GimpBlendTool
*blend_tool);
-
-static gint gimp_blend_tool_editor_add_stop (GimpBlendTool
*blend_tool,
- gdouble
value);
-static void gimp_blend_tool_editor_delete_stop (GimpBlendTool
*blend_tool,
- gint
slider);
-
-static void gimp_blend_tool_editor_update_sliders (GimpBlendTool
*blend_tool);
-
-static GtkWidget * gimp_blend_tool_editor_color_entry_new (GimpBlendTool
*blend_tool,
- const gchar
*title,
- Direction
direction,
- GtkWidget
*chain_button,
- GtkWidget
**color_panel,
- GtkWidget
**type_combo);
-static void gimp_blend_tool_editor_init_endpoint_gui (GimpBlendTool
*blend_tool);
-static void gimp_blend_tool_editor_init_stop_gui (GimpBlendTool
*blend_tool);
-static void gimp_blend_tool_editor_update_endpoint_gui (GimpBlendTool
*blend_tool,
- gint
selection);
-static void gimp_blend_tool_editor_update_stop_gui (GimpBlendTool
*blend_tool,
- gint
selection);
-static void gimp_blend_tool_editor_update_gui (GimpBlendTool
*blend_tool);
+static gboolean gimp_blend_tool_editor_line_can_add_slider (GimpToolLine
*line,
+ gdouble
value,
+ GimpBlendTool
*blend_tool);
+static gint gimp_blend_tool_editor_line_add_slider (GimpToolLine
*line,
+ gdouble
value,
+ GimpBlendTool
*blend_tool);
+static void gimp_blend_tool_editor_line_remove_slider (GimpToolLine
*line,
+ gint
slider,
+ GimpBlendTool
*blend_tool);
+static void gimp_blend_tool_editor_line_selection_changed (GimpToolLine
*line,
+ GimpBlendTool
*blend_tool);
+static gboolean gimp_blend_tool_editor_line_handle_clicked (GimpToolLine
*line,
+ gint
handle,
+ GdkModifierType
state,
+ GimpButtonPressType
press_type,
+ GimpBlendTool
*blend_tool);
+
+static void gimp_blend_tool_editor_gui_response (GimpToolGui
*gui,
+ gint
response_id,
+ GimpBlendTool
*blend_tool);
+
+static void gimp_blend_tool_editor_color_entry_color_changed (GimpColorButton
*button,
+ GimpBlendTool
*blend_tool);
+
+static void gimp_blend_tool_editor_color_entry_type_changed (GtkComboBox
*combo,
+ GimpBlendTool
*blend_tool);
+
+static void gimp_blend_tool_editor_endpoint_se_value_changed (GimpSizeEntry
*se,
+ GimpBlendTool
*blend_tool);
+
+static void gimp_blend_tool_editor_stop_spinbutton_value_changed (GtkAdjustment
*adjustment,
+ GimpBlendTool
*blend_tool);
+
+static void gimp_blend_tool_editor_stop_delete_clicked (GtkWidget
*button,
+ GimpBlendTool
*blend_tool);
+
+static void gimp_blend_tool_editor_midpoint_spinbutton_value_changed (GtkAdjustment
*adjustment,
+ GimpBlendTool
*blend_tool);
+
+static void gimp_blend_tool_editor_midpoint_type_changed (GtkComboBox
*combo,
+ GimpBlendTool
*blend_tool);
+
+static void gimp_blend_tool_editor_midpoint_color_changed (GtkComboBox
*combo,
+ GimpBlendTool
*blend_tool);
+
+static void gimp_blend_tool_editor_midpoint_new_stop_clicked (GtkWidget
*button,
+ GimpBlendTool
*blend_tool);
+static void gimp_blend_tool_editor_midpoint_center_clicked (GtkWidget
*button,
+ GimpBlendTool
*blend_tool);
+
+static gboolean gimp_blend_tool_editor_is_gradient_editable (GimpBlendTool
*blend_tool);
+
+static gboolean gimp_blend_tool_editor_handle_is_endpoint (GimpBlendTool
*blend_tool,
+ gint
handle);
+static gboolean gimp_blend_tool_editor_handle_is_stop (GimpBlendTool
*blend_tool,
+ gint
handle);
+static gboolean gimp_blend_tool_editor_handle_is_midpoint (GimpBlendTool
*blend_tool,
+ gint
handle);
+static GimpGradientSegment * gimp_blend_tool_editor_handle_get_segment (GimpBlendTool
*blend_tool,
+ gint
handle);
+
+static void gimp_blend_tool_editor_freeze_gradient (GimpBlendTool
*blend_tool);
+static void gimp_blend_tool_editor_thaw_gradient (GimpBlendTool
*blend_tool);
+
+static gint gimp_blend_tool_editor_add_stop (GimpBlendTool
*blend_tool,
+ gdouble
value);
+static void gimp_blend_tool_editor_delete_stop (GimpBlendTool
*blend_tool,
+ gint
slider);
+static gint gimp_blend_tool_editor_midpoint_to_stop (GimpBlendTool
*blend_tool,
+ gint
slider);
+
+static void gimp_blend_tool_editor_update_sliders (GimpBlendTool
*blend_tool);
+
+static GtkWidget * gimp_blend_tool_editor_color_entry_new (GimpBlendTool
*blend_tool,
+ const gchar
*title,
+ Direction
direction,
+ GtkWidget
*chain_button,
+ GtkWidget
**color_panel,
+ GtkWidget
**type_combo);
+static void gimp_blend_tool_editor_init_endpoint_gui (GimpBlendTool
*blend_tool);
+static void gimp_blend_tool_editor_init_stop_gui (GimpBlendTool
*blend_tool);
+static void gimp_blend_tool_editor_init_midpoint_gui (GimpBlendTool
*blend_tool);
+static void gimp_blend_tool_editor_update_endpoint_gui (GimpBlendTool
*blend_tool,
+ gint
selection);
+static void gimp_blend_tool_editor_update_stop_gui (GimpBlendTool
*blend_tool,
+ gint
selection);
+static void gimp_blend_tool_editor_update_midpoint_gui (GimpBlendTool
*blend_tool,
+ gint
selection);
+static void gimp_blend_tool_editor_update_gui (GimpBlendTool
*blend_tool);
/* private functions */
@@ -234,13 +253,9 @@ gimp_blend_tool_editor_line_handle_clicked (GimpToolLine *line,
if (press_type == GIMP_BUTTON_PRESS_DOUBLE &&
gimp_blend_tool_editor_is_gradient_editable (blend_tool))
{
- const GimpControllerSlider *sliders;
- gint stop;
+ gint stop;
- sliders = gimp_tool_line_get_sliders (line, NULL);
-
- stop = gimp_blend_tool_editor_add_stop (blend_tool,
- sliders[handle].value);
+ stop = gimp_blend_tool_editor_midpoint_to_stop (blend_tool, handle);
gimp_tool_line_set_selection (line, stop);
@@ -523,6 +538,143 @@ gimp_blend_tool_editor_stop_delete_clicked (GtkWidget *button,
gimp_blend_tool_editor_delete_stop (blend_tool, selection);
}
+static void
+gimp_blend_tool_editor_midpoint_spinbutton_value_changed (GtkAdjustment *adjustment,
+ GimpBlendTool *blend_tool)
+{
+ gint selection;
+ gdouble value;
+ GimpGradientSegment *seg;
+
+ if (blend_tool->modifying)
+ return;
+
+ selection =
+ gimp_tool_line_get_selection (GIMP_TOOL_LINE (blend_tool->widget));
+
+ value = gtk_adjustment_get_value (adjustment) / 100.0;
+
+ blend_tool->modifying = TRUE;
+
+ gimp_blend_tool_editor_freeze_gradient (blend_tool);
+
+ seg = gimp_blend_tool_editor_handle_get_segment (blend_tool, selection);
+
+ seg->middle = value;
+
+ gimp_blend_tool_editor_thaw_gradient (blend_tool);
+
+ blend_tool->modifying = FALSE;
+
+ gimp_blend_tool_editor_update_sliders (blend_tool);
+ gimp_blend_tool_editor_update_gui (blend_tool);
+}
+
+static void
+gimp_blend_tool_editor_midpoint_type_changed (GtkComboBox *combo,
+ GimpBlendTool *blend_tool)
+{
+ gint selection;
+ gint type;
+ GimpGradientSegment *seg;
+
+ if (blend_tool->modifying)
+ return;
+
+ selection =
+ gimp_tool_line_get_selection (GIMP_TOOL_LINE (blend_tool->widget));
+
+ if (! gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (combo), &type))
+ return;
+
+ blend_tool->modifying = TRUE;
+
+ gimp_blend_tool_editor_freeze_gradient (blend_tool);
+
+ seg = gimp_blend_tool_editor_handle_get_segment (blend_tool, selection);
+
+ seg->type = type;
+
+ gimp_blend_tool_editor_thaw_gradient (blend_tool);
+
+ blend_tool->modifying = FALSE;
+
+ gimp_blend_tool_editor_update_gui (blend_tool);
+}
+
+static void
+gimp_blend_tool_editor_midpoint_color_changed (GtkComboBox *combo,
+ GimpBlendTool *blend_tool)
+{
+ gint selection;
+ gint color;
+ GimpGradientSegment *seg;
+
+ if (blend_tool->modifying)
+ return;
+
+ selection =
+ gimp_tool_line_get_selection (GIMP_TOOL_LINE (blend_tool->widget));
+
+ if (! gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (combo), &color))
+ return;
+
+ blend_tool->modifying = TRUE;
+
+ gimp_blend_tool_editor_freeze_gradient (blend_tool);
+
+ seg = gimp_blend_tool_editor_handle_get_segment (blend_tool, selection);
+
+ seg->color = color;
+
+ gimp_blend_tool_editor_thaw_gradient (blend_tool);
+
+ blend_tool->modifying = FALSE;
+
+ gimp_blend_tool_editor_update_gui (blend_tool);
+}
+
+static void
+gimp_blend_tool_editor_midpoint_new_stop_clicked (GtkWidget *button,
+ GimpBlendTool *blend_tool)
+{
+ gint selection;
+ gint stop;
+
+ selection =
+ gimp_tool_line_get_selection (GIMP_TOOL_LINE (blend_tool->widget));
+
+ stop = gimp_blend_tool_editor_midpoint_to_stop (blend_tool, selection);
+
+ gimp_tool_line_set_selection (GIMP_TOOL_LINE (blend_tool->widget), stop);
+}
+
+static void
+gimp_blend_tool_editor_midpoint_center_clicked (GtkWidget *button,
+ GimpBlendTool *blend_tool)
+{
+ gint selection;
+ GimpGradientSegment *seg;
+
+ selection =
+ gimp_tool_line_get_selection (GIMP_TOOL_LINE (blend_tool->widget));
+
+ blend_tool->modifying = TRUE;
+
+ gimp_blend_tool_editor_freeze_gradient (blend_tool);
+
+ seg = gimp_blend_tool_editor_handle_get_segment (blend_tool, selection);
+
+ gimp_gradient_segment_range_recenter_handles (blend_tool->gradient, seg, seg);
+
+ gimp_blend_tool_editor_thaw_gradient (blend_tool);
+
+ blend_tool->modifying = FALSE;
+
+ gimp_blend_tool_editor_update_sliders (blend_tool);
+ gimp_blend_tool_editor_update_gui (blend_tool);
+}
+
static gboolean
gimp_blend_tool_editor_is_gradient_editable (GimpBlendTool *blend_tool)
{
@@ -686,6 +838,18 @@ gimp_blend_tool_editor_delete_stop (GimpBlendTool *blend_tool,
gimp_blend_tool_editor_update_sliders (blend_tool);
}
+static gint
+gimp_blend_tool_editor_midpoint_to_stop (GimpBlendTool *blend_tool,
+ gint slider)
+{
+ const GimpControllerSlider *sliders;
+
+ sliders = gimp_tool_line_get_sliders (GIMP_TOOL_LINE (blend_tool->widget),
+ NULL);
+
+ return gimp_blend_tool_editor_add_stop (blend_tool, sliders[slider].value);
+}
+
static void
gimp_blend_tool_editor_update_sliders (GimpBlendTool *blend_tool)
{
@@ -1084,6 +1248,128 @@ gimp_blend_tool_editor_init_stop_gui (GimpBlendTool *blend_tool)
}
static void
+gimp_blend_tool_editor_init_midpoint_gui (GimpBlendTool *blend_tool)
+{
+ GtkWidget *editor;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *spinbutton;
+ GtkWidget *combo;
+ GtkWidget *separator;
+ gint row = 0;
+
+ /* the stop editor */
+ blend_tool->midpoint_editor =
+ editor = gimp_editor_new ();
+ gtk_box_pack_start (GTK_BOX (gimp_tool_gui_get_vbox (blend_tool->gui)),
+ editor, FALSE, TRUE, 0);
+
+ /* the main table */
+ table = gtk_table_new (1, 2, FALSE);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 4);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 4);
+ gtk_box_pack_start (GTK_BOX (editor), table, FALSE, TRUE, 0);
+ gtk_widget_show (table);
+
+ /* the position label */
+ label = gtk_label_new (_("Position:"));
+ gtk_label_set_xalign (GTK_LABEL (label), 0.0);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1,
+ GTK_SHRINK | GTK_FILL, GTK_SHRINK, 0, 0);
+ gtk_widget_show (label);
+
+ /* the position spin button */
+ blend_tool->midpoint_spinbutton =
+ spinbutton = gtk_spin_button_new_with_range (0.0, 100.0,
+ 1.0);
+ gtk_entry_set_width_chars (GTK_ENTRY (spinbutton), 6);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE);
+ gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinbutton), 2);
+ gtk_table_attach (GTK_TABLE (table), spinbutton, 1, 2, row, row + 1,
+ GTK_SHRINK | GTK_FILL | GTK_EXPAND,
+ GTK_SHRINK | GTK_FILL,
+ 0, 0);
+ gtk_widget_show (spinbutton);
+
+ g_signal_connect (
+ gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spinbutton)),
+ "value-changed",
+ G_CALLBACK (gimp_blend_tool_editor_midpoint_spinbutton_value_changed),
+ blend_tool);
+
+ row++;
+
+ /* the type label */
+ label = gtk_label_new (_("Blending:"));
+ gtk_label_set_xalign (GTK_LABEL (label), 0.0);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1,
+ GTK_SHRINK | GTK_FILL, GTK_SHRINK, 0, 0);
+ gtk_widget_show (label);
+
+ /* the type combo */
+ blend_tool->midpoint_type_combo =
+ combo = gimp_enum_combo_box_new (GIMP_TYPE_GRADIENT_SEGMENT_TYPE);
+ gtk_table_attach (GTK_TABLE (table), combo, 1, 2, row, row + 1,
+ GTK_SHRINK | GTK_FILL | GTK_EXPAND,
+ GTK_SHRINK | GTK_FILL,
+ 0, 0);
+ gtk_widget_show (combo);
+
+ g_signal_connect (combo, "changed",
+ G_CALLBACK (gimp_blend_tool_editor_midpoint_type_changed),
+ blend_tool);
+
+ row++;
+
+ /* the color label */
+ label = gtk_label_new (_("Coloring:"));
+ gtk_label_set_xalign (GTK_LABEL (label), 0.0);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1,
+ GTK_SHRINK | GTK_FILL, GTK_SHRINK, 0, 0);
+ gtk_widget_show (label);
+
+ /* the color combo */
+ blend_tool->midpoint_color_combo =
+ combo = gimp_enum_combo_box_new (GIMP_TYPE_GRADIENT_SEGMENT_COLOR);
+ gtk_table_attach (GTK_TABLE (table), combo, 1, 2, row, row + 1,
+ GTK_SHRINK | GTK_FILL | GTK_EXPAND,
+ GTK_SHRINK | GTK_FILL,
+ 0, 0);
+ gtk_widget_show (combo);
+
+ g_signal_connect (combo, "changed",
+ G_CALLBACK (gimp_blend_tool_editor_midpoint_color_changed),
+ blend_tool);
+
+ row++;
+
+ /* the action buttons separator */
+ separator = gtk_hseparator_new ();
+ gtk_table_attach (GTK_TABLE (table), separator, 0, 2, row, row + 1,
+ GTK_SHRINK | GTK_FILL | GTK_EXPAND,
+ GTK_SHRINK | GTK_FILL,
+ 0, 0);
+ gtk_widget_show (separator);
+
+ row++;
+
+ /* the new stop button */
+ gimp_editor_add_button (GIMP_EDITOR (editor),
+ GIMP_ICON_DOCUMENT_NEW, _("New stop at midpoint"),
+ NULL,
+ G_CALLBACK (gimp_blend_tool_editor_midpoint_new_stop_clicked),
+ NULL, blend_tool);
+
+ /* the center button */
+ blend_tool->midpoint_center_button =
+ gimp_editor_add_button (GIMP_EDITOR (editor),
+ GIMP_ICON_CENTER_HORIZONTAL, _("Center midpoint"),
+ NULL,
+ G_CALLBACK (gimp_blend_tool_editor_midpoint_center_clicked),
+ NULL, blend_tool);
+}
+
+static void
gimp_blend_tool_editor_update_endpoint_gui (GimpBlendTool *blend_tool,
gint selection)
{
@@ -1248,6 +1534,64 @@ gimp_blend_tool_editor_update_stop_gui (GimpBlendTool *blend_tool,
}
static void
+gimp_blend_tool_editor_update_midpoint_gui (GimpBlendTool *blend_tool,
+ gint selection)
+{
+ gboolean editable;
+ const GimpGradientSegment *seg;
+ gint index;
+ gchar *title;
+ gdouble min;
+ gdouble max;
+ gdouble value;
+ GimpGradientSegmentType type;
+ GimpGradientSegmentColor color;
+
+ editable = gimp_blend_tool_editor_is_gradient_editable (blend_tool);
+
+ seg = gimp_blend_tool_editor_handle_get_segment (blend_tool, selection);
+
+ index = GPOINTER_TO_INT (
+ gimp_tool_line_get_sliders (GIMP_TOOL_LINE (blend_tool->widget),
+ NULL)[selection].data);
+
+ title = g_strdup_printf (_("Midpoint %d"), index + 1);
+
+ min = seg->left;
+ max = seg->right;
+ value = seg->middle;
+ type = seg->type;
+ color = seg->color;
+
+ gimp_tool_gui_set_title (blend_tool->gui, title);
+
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON (blend_tool->midpoint_spinbutton),
+ 100.0 * min, 100.0 * max);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (blend_tool->midpoint_spinbutton),
+ 100.0 * value);
+
+ gimp_int_combo_box_set_active (
+ GIMP_INT_COMBO_BOX (blend_tool->midpoint_type_combo), type);
+
+ gimp_int_combo_box_set_active (
+ GIMP_INT_COMBO_BOX (blend_tool->midpoint_color_combo), color);
+
+ gtk_widget_set_sensitive (blend_tool->midpoint_center_button,
+ fabs (value - (min + max) / 2.0) > EPSILON);
+
+ gtk_widget_set_sensitive (blend_tool->midpoint_spinbutton, editable);
+ gtk_widget_set_sensitive (blend_tool->midpoint_type_combo, editable);
+ gtk_widget_set_sensitive (blend_tool->midpoint_color_combo, editable);
+ gtk_widget_set_sensitive (
+ GTK_WIDGET (gimp_editor_get_button_box (GIMP_EDITOR (blend_tool->midpoint_editor))),
+ editable);
+
+ g_free (title);
+
+ gtk_widget_show (blend_tool->midpoint_editor);
+}
+
+static void
gimp_blend_tool_editor_update_gui (GimpBlendTool *blend_tool)
{
GimpBlendOptions *options = GIMP_BLEND_TOOL_GET_OPTIONS (blend_tool);
@@ -1289,6 +1633,7 @@ gimp_blend_tool_editor_update_gui (GimpBlendTool *blend_tool)
gimp_blend_tool_editor_init_endpoint_gui (blend_tool);
gimp_blend_tool_editor_init_stop_gui (blend_tool);
+ gimp_blend_tool_editor_init_midpoint_gui (blend_tool);
}
blend_tool->modifying = TRUE;
@@ -1303,6 +1648,11 @@ gimp_blend_tool_editor_update_gui (GimpBlendTool *blend_tool)
else
gtk_widget_hide (blend_tool->stop_editor);
+ if (gimp_blend_tool_editor_handle_is_midpoint (blend_tool, selection))
+ gimp_blend_tool_editor_update_midpoint_gui (blend_tool, selection);
+ else
+ gtk_widget_hide (blend_tool->midpoint_editor);
+
blend_tool->modifying = FALSE;
gimp_tool_gui_show (blend_tool->gui);
diff --git a/app/tools/gimpblendtool.h b/app/tools/gimpblendtool.h
index 1ed46c7..28b58fa 100644
--- a/app/tools/gimpblendtool.h
+++ b/app/tools/gimpblendtool.h
@@ -78,6 +78,11 @@ struct _GimpBlendTool
GtkWidget *stop_right_color_panel;
GtkWidget *stop_right_type_combo;
GtkWidget *stop_chain_button;
+ GtkWidget *midpoint_editor;
+ GtkWidget *midpoint_spinbutton;
+ GtkWidget *midpoint_type_combo;
+ GtkWidget *midpoint_color_combo;
+ GtkWidget *midpoint_center_button;
};
struct _GimpBlendToolClass
diff --git a/libgimpbase/gimpbaseenums.c b/libgimpbase/gimpbaseenums.c
index 73ebfb6..0c12b93 100644
--- a/libgimpbase/gimpbaseenums.c
+++ b/libgimpbase/gimpbaseenums.c
@@ -641,9 +641,9 @@ gimp_gradient_segment_color_get_type (void)
static const GimpEnumDesc descs[] =
{
- { GIMP_GRADIENT_SEGMENT_RGB, "GIMP_GRADIENT_SEGMENT_RGB", NULL },
- { GIMP_GRADIENT_SEGMENT_HSV_CCW, "GIMP_GRADIENT_SEGMENT_HSV_CCW", NULL },
- { GIMP_GRADIENT_SEGMENT_HSV_CW, "GIMP_GRADIENT_SEGMENT_HSV_CW", NULL },
+ { GIMP_GRADIENT_SEGMENT_RGB, NC_("gradient-segment-color", "RGB"), NULL },
+ { GIMP_GRADIENT_SEGMENT_HSV_CCW, NC_("gradient-segment-color", "HSV (ccw)"), NULL },
+ { GIMP_GRADIENT_SEGMENT_HSV_CW, NC_("gradient-segment-color", "HSV (cw)"), NULL },
{ 0, NULL, NULL }
};
@@ -675,11 +675,11 @@ gimp_gradient_segment_type_get_type (void)
static const GimpEnumDesc descs[] =
{
- { GIMP_GRADIENT_SEGMENT_LINEAR, "GIMP_GRADIENT_SEGMENT_LINEAR", NULL },
- { GIMP_GRADIENT_SEGMENT_CURVED, "GIMP_GRADIENT_SEGMENT_CURVED", NULL },
- { GIMP_GRADIENT_SEGMENT_SINE, "GIMP_GRADIENT_SEGMENT_SINE", NULL },
- { GIMP_GRADIENT_SEGMENT_SPHERE_INCREASING, "GIMP_GRADIENT_SEGMENT_SPHERE_INCREASING", NULL },
- { GIMP_GRADIENT_SEGMENT_SPHERE_DECREASING, "GIMP_GRADIENT_SEGMENT_SPHERE_DECREASING", NULL },
+ { GIMP_GRADIENT_SEGMENT_LINEAR, NC_("gradient-segment-type", "Linear"), NULL },
+ { GIMP_GRADIENT_SEGMENT_CURVED, NC_("gradient-segment-type", "Curved"), NULL },
+ { GIMP_GRADIENT_SEGMENT_SINE, NC_("gradient-segment-type", "Sinusoidal"), NULL },
+ { GIMP_GRADIENT_SEGMENT_SPHERE_INCREASING, NC_("gradient-segment-type", "Spherical (inc)"), NULL },
+ { GIMP_GRADIENT_SEGMENT_SPHERE_DECREASING, NC_("gradient-segment-type", "Spherical (dec)"), NULL },
{ 0, NULL, NULL }
};
diff --git a/libgimpbase/gimpbaseenums.h b/libgimpbase/gimpbaseenums.h
index c6f5dfd..3886e2b 100644
--- a/libgimpbase/gimpbaseenums.h
+++ b/libgimpbase/gimpbaseenums.h
@@ -346,9 +346,9 @@ GType gimp_gradient_segment_color_get_type (void) G_GNUC_CONST;
typedef enum
{
- GIMP_GRADIENT_SEGMENT_RGB, /* normal RGB */
- GIMP_GRADIENT_SEGMENT_HSV_CCW, /* counterclockwise hue */
- GIMP_GRADIENT_SEGMENT_HSV_CW /* clockwise hue */
+ GIMP_GRADIENT_SEGMENT_RGB, /*< desc="RGB" >*/
+ GIMP_GRADIENT_SEGMENT_HSV_CCW, /*< desc="HSV (ccw)" >*/
+ GIMP_GRADIENT_SEGMENT_HSV_CW /*< desc="HSV (cw)" >*/
} GimpGradientSegmentColor;
@@ -358,11 +358,11 @@ GType gimp_gradient_segment_type_get_type (void) G_GNUC_CONST;
typedef enum
{
- GIMP_GRADIENT_SEGMENT_LINEAR,
- GIMP_GRADIENT_SEGMENT_CURVED,
- GIMP_GRADIENT_SEGMENT_SINE,
- GIMP_GRADIENT_SEGMENT_SPHERE_INCREASING,
- GIMP_GRADIENT_SEGMENT_SPHERE_DECREASING
+ GIMP_GRADIENT_SEGMENT_LINEAR, /*< desc="Linear" >*/
+ GIMP_GRADIENT_SEGMENT_CURVED, /*< desc="Curved" >*/
+ GIMP_GRADIENT_SEGMENT_SINE, /*< desc="Sinusoidal" >*/
+ GIMP_GRADIENT_SEGMENT_SPHERE_INCREASING, /*< desc="Spherical (inc)" >*/
+ GIMP_GRADIENT_SEGMENT_SPHERE_DECREASING /*< desc="Spherical (dec)" >*/
} GimpGradientSegmentType;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]