diff --git a/ChangeLog b/ChangeLog index b2a19cac60..c3da304d54 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2006-09-01 Michael Natterer + + * app/actions/gradient-editor-actions.c + * app/actions/gradient-editor-commands.[ch]: added actions and + callbacks to select a gradient segment's left and right color + type. Handle FG/BG color correctly in a few places. Use + GimpDataEditor's context instead of the user context. + + * menus/gradient-editor-menu.xml: added the actions to the menu. + + Cleanup: + + * app/actions/palette-editor-actions.c + * app/actions/palette-editor-commands.c: use GimpDataEditor's + context instead of the user context. + + * app/actions/brush-editor-actions.c: remove unused context + variable. + 2006-08-31 Michael Natterer * app/widgets/gimpcontainerview.c diff --git a/app/actions/brush-editor-actions.c b/app/actions/brush-editor-actions.c index 3eb65737e2..dcd0820ec9 100644 --- a/app/actions/brush-editor-actions.c +++ b/app/actions/brush-editor-actions.c @@ -70,13 +70,10 @@ brush_editor_actions_update (GimpActionGroup *group, gpointer user_data) { GimpDataEditor *data_editor = GIMP_DATA_EDITOR (user_data); - GimpContext *context; GimpData *data; gboolean editable = FALSE; gboolean edit_active = FALSE; - context = gimp_get_user_context (group->gimp); - data = data_editor->data; if (data) diff --git a/app/actions/gradient-editor-actions.c b/app/actions/gradient-editor-actions.c index 36959ace9c..b3ed7ef15d 100644 --- a/app/actions/gradient-editor-actions.c +++ b/app/actions/gradient-editor-actions.c @@ -46,11 +46,15 @@ static const GimpActionEntry gradient_editor_actions[] = N_("Gradient Editor Menu"), NULL, NULL, NULL, GIMP_HELP_GRADIENT_EDITOR_DIALOG }, + { "gradient-editor-left-color-type", NULL, + N_("Left Color Type") }, { "gradient-editor-load-left-color", GTK_STOCK_REVERT_TO_SAVED, N_("_Load Left Color From") }, { "gradient-editor-save-left-color", GTK_STOCK_SAVE, N_("_Save Left Color To") }, + { "gradient-editor-right-color-type", NULL, + N_("Right Color Type") }, { "gradient-editor-load-right-color", GTK_STOCK_REVERT_TO_SAVED, N_("Load Right Color Fr_om") }, { "gradient-editor-save-right-color", GTK_STOCK_SAVE, @@ -248,6 +252,62 @@ static const GimpEnumActionEntry gradient_editor_save_right_actions[] = #undef SAVE_RIGHT_TO +static const GimpRadioActionEntry gradient_editor_left_color_type_actions[] = +{ + { "gradient-editor-left-color-fixed", NULL, + N_("_Fixed"), NULL, NULL, + GIMP_GRADIENT_COLOR_FIXED, + GIMP_HELP_GRADIENT_EDITOR_LEFT_COLOR }, + + { "gradient-editor-left-color-foreground", NULL, + N_("F_oreground Color"), NULL, NULL, + GIMP_GRADIENT_COLOR_FOREGROUND, + GIMP_HELP_GRADIENT_EDITOR_LEFT_COLOR }, + + { "gradient-editor-left-color-foreground-transparent", NULL, + N_("Fo_reground Color (Transparent)"), NULL, NULL, + GIMP_GRADIENT_COLOR_FOREGROUND_TRANSPARENT, + GIMP_HELP_GRADIENT_EDITOR_LEFT_COLOR }, + + { "gradient-editor-left-color-background", NULL, + N_("_Background Color"), NULL, NULL, + GIMP_GRADIENT_COLOR_BACKGROUND, + GIMP_HELP_GRADIENT_EDITOR_LEFT_COLOR }, + + { "gradient-editor-left-color-background-transparent", NULL, + N_("B_ackground Color (Transparent)"), NULL, NULL, + GIMP_GRADIENT_COLOR_BACKGROUND_TRANSPARENT, + GIMP_HELP_GRADIENT_EDITOR_LEFT_COLOR } +}; + +static const GimpRadioActionEntry gradient_editor_right_color_type_actions[] = +{ + { "gradient-editor-right-color-fixed", NULL, + N_("_Fixed"), NULL, NULL, + GIMP_GRADIENT_COLOR_FIXED, + GIMP_HELP_GRADIENT_EDITOR_RIGHT_COLOR }, + + { "gradient-editor-right-color-foreground", NULL, + N_("F_oreground Color"), NULL, NULL, + GIMP_GRADIENT_COLOR_FOREGROUND, + GIMP_HELP_GRADIENT_EDITOR_RIGHT_COLOR }, + + { "gradient-editor-right-color-foreground-transparent", NULL, + N_("Fo_reground Color (Transparent)"), NULL, NULL, + GIMP_GRADIENT_COLOR_FOREGROUND_TRANSPARENT, + GIMP_HELP_GRADIENT_EDITOR_RIGHT_COLOR }, + + { "gradient-editor-right-color-background", NULL, + N_("_Background Color"), NULL, NULL, + GIMP_GRADIENT_COLOR_BACKGROUND, + GIMP_HELP_GRADIENT_EDITOR_RIGHT_COLOR }, + + { "gradient-editor-right-color-background-transparent", NULL, + N_("B_ackground Color (Transparent)"), NULL, NULL, + GIMP_GRADIENT_COLOR_BACKGROUND_TRANSPARENT, + GIMP_HELP_GRADIENT_EDITOR_RIGHT_COLOR } +}; + static const GimpRadioActionEntry gradient_editor_blending_actions[] = { { "gradient-editor-blending-linear", NULL, @@ -358,6 +418,20 @@ gradient_editor_actions_setup (GimpActionGroup *group) G_N_ELEMENTS (gradient_editor_save_right_actions), G_CALLBACK (gradient_editor_save_right_cmd_callback)); + gimp_action_group_add_radio_actions (group, + gradient_editor_left_color_type_actions, + G_N_ELEMENTS (gradient_editor_left_color_type_actions), + NULL, + 0, + G_CALLBACK (gradient_editor_left_color_type_cmd_callback)); + + gimp_action_group_add_radio_actions (group, + gradient_editor_right_color_type_actions, + G_N_ELEMENTS (gradient_editor_right_color_type_actions), + NULL, + 0, + G_CALLBACK (gradient_editor_right_color_type_cmd_callback)); + gimp_action_group_add_radio_actions (group, gradient_editor_blending_actions, G_N_ELEMENTS (gradient_editor_blending_actions), @@ -385,41 +459,67 @@ gradient_editor_actions_update (GimpActionGroup *group, GimpGradientEditor *editor = GIMP_GRADIENT_EDITOR (data); GimpDataEditor *data_editor = GIMP_DATA_EDITOR (data); GimpGradient *gradient; - GimpContext *context; gboolean editable = FALSE; - GimpGradientSegment *left_seg = NULL; - GimpGradientSegment *right_seg = NULL; + GimpRGB left_color; + GimpRGB right_color; + GimpRGB left_seg_color; + GimpRGB right_seg_color; GimpRGB fg; GimpRGB bg; gboolean blending_equal = TRUE; gboolean coloring_equal = TRUE; + gboolean left_editable = TRUE; + gboolean right_editable = TRUE; gboolean selection = FALSE; gboolean delete = FALSE; gboolean edit_active = FALSE; gradient = GIMP_GRADIENT (data_editor->data); - context = gimp_get_user_context (data_editor->data_factory->gimp); - if (gradient) { GimpGradientSegmentType type; GimpGradientSegmentColor color; + GimpGradientSegment *left_seg; + GimpGradientSegment *right_seg; GimpGradientSegment *seg, *aseg; if (data_editor->data_editable) editable = TRUE; + gimp_gradient_get_color_at (gradient, data_editor->context, + editor->control_sel_l, + editor->control_sel_l->left, FALSE, + &left_color); + if (editor->control_sel_l->prev) left_seg = editor->control_sel_l->prev; else left_seg = gimp_gradient_segment_get_last (editor->control_sel_l); + gimp_gradient_get_color_at (gradient, data_editor->context, + left_seg, left_seg->right, FALSE, + &left_seg_color); + + gimp_gradient_get_color_at (gradient, data_editor->context, + editor->control_sel_r, + editor->control_sel_r->right, FALSE, + &right_color); + if (editor->control_sel_r->next) right_seg = editor->control_sel_r->next; else right_seg = gimp_gradient_segment_get_first (editor->control_sel_r); + gimp_gradient_get_color_at (gradient, data_editor->context, + right_seg, right_seg->left, FALSE, + &right_seg_color); + + left_editable = (editor->control_sel_l->left_color_type == + GIMP_GRADIENT_COLOR_FIXED); + right_editable = (editor->control_sel_r->right_color_type == + GIMP_GRADIENT_COLOR_FIXED); + type = editor->control_sel_l->type; color = editor->control_sel_l->color; @@ -439,10 +539,10 @@ gradient_editor_actions_update (GimpActionGroup *group, delete = (editor->control_sel_l->prev || editor->control_sel_r->next); } - if (context) + if (data_editor->context) { - gimp_context_get_foreground (context, &fg); - gimp_context_get_background (context, &bg); + gimp_context_get_foreground (data_editor->context, &fg); + gimp_context_get_background (data_editor->context, &bg); } /* pretend the gradient not being editable while the dialog is @@ -452,6 +552,12 @@ gradient_editor_actions_update (GimpActionGroup *group, if (! GTK_WIDGET_SENSITIVE (editor)) editable = FALSE; + if (! editable) + { + left_editable = FALSE; + right_editable = FALSE; + } + edit_active = gimp_data_editor_get_edit_active (data_editor); #define SET_ACTIVE(action,condition) \ @@ -465,36 +571,66 @@ gradient_editor_actions_update (GimpActionGroup *group, #define SET_VISIBLE(action,condition) \ gimp_action_group_set_action_visible (group, action, (condition) != 0) - SET_SENSITIVE ("gradient-editor-left-color", editable); + SET_SENSITIVE ("gradient-editor-left-color-fixed", editable); + SET_SENSITIVE ("gradient-editor-left-color-foreground", editable); + SET_SENSITIVE ("gradient-editor-left-color-foreground-transparent", editable); + SET_SENSITIVE ("gradient-editor-left-color-background", editable); + SET_SENSITIVE ("gradient-editor-left-color-background-transparent", editable); + + if (gradient) + { + switch (editor->control_sel_l->left_color_type) + { + case GIMP_GRADIENT_COLOR_FIXED: + SET_ACTIVE ("gradient-editor-left-color-fixed", TRUE); + break; + case GIMP_GRADIENT_COLOR_FOREGROUND: + SET_ACTIVE ("gradient-editor-left-color-foreground", TRUE); + break; + case GIMP_GRADIENT_COLOR_FOREGROUND_TRANSPARENT: + SET_ACTIVE ("gradient-editor-left-color-foreground-transparent", TRUE); + break; + case GIMP_GRADIENT_COLOR_BACKGROUND: + SET_ACTIVE ("gradient-editor-left-color-background", TRUE); + break; + case GIMP_GRADIENT_COLOR_BACKGROUND_TRANSPARENT: + SET_ACTIVE ("gradient-editor-left-color-background-transparent", TRUE); + break; + } + } + + SET_SENSITIVE ("gradient-editor-left-color", left_editable); SET_SENSITIVE ("gradient-editor-load-left-left-neighbor", editable); SET_SENSITIVE ("gradient-editor-load-left-right-endpoint", editable); if (gradient) { SET_COLOR ("gradient-editor-left-color", - &editor->control_sel_l->left_color, FALSE); + &left_color, FALSE); SET_COLOR ("gradient-editor-load-left-left-neighbor", - &left_seg->right_color, FALSE); + &left_seg_color, FALSE); SET_COLOR ("gradient-editor-load-left-right-endpoint", - &editor->control_sel_r->right_color, FALSE); + &right_color, FALSE); } - SET_SENSITIVE ("gradient-editor-load-left-fg", editable); - SET_SENSITIVE ("gradient-editor-load-left-bg", editable); + SET_SENSITIVE ("gradient-editor-load-left-fg", left_editable); + SET_SENSITIVE ("gradient-editor-load-left-bg", left_editable); - SET_COLOR ("gradient-editor-load-left-fg", context ? &fg : NULL, FALSE); - SET_COLOR ("gradient-editor-load-left-bg", context ? &bg : NULL, FALSE); + SET_COLOR ("gradient-editor-load-left-fg", + data_editor->context ? &fg : NULL, FALSE); + SET_COLOR ("gradient-editor-load-left-bg", + data_editor->context ? &bg : NULL, FALSE); - SET_SENSITIVE ("gradient-editor-load-left-01", editable); - SET_SENSITIVE ("gradient-editor-load-left-02", editable); - SET_SENSITIVE ("gradient-editor-load-left-03", editable); - SET_SENSITIVE ("gradient-editor-load-left-04", editable); - SET_SENSITIVE ("gradient-editor-load-left-05", editable); - SET_SENSITIVE ("gradient-editor-load-left-06", editable); - SET_SENSITIVE ("gradient-editor-load-left-07", editable); - SET_SENSITIVE ("gradient-editor-load-left-08", editable); - SET_SENSITIVE ("gradient-editor-load-left-09", editable); - SET_SENSITIVE ("gradient-editor-load-left-10", editable); + SET_SENSITIVE ("gradient-editor-load-left-01", left_editable); + SET_SENSITIVE ("gradient-editor-load-left-02", left_editable); + SET_SENSITIVE ("gradient-editor-load-left-03", left_editable); + SET_SENSITIVE ("gradient-editor-load-left-04", left_editable); + SET_SENSITIVE ("gradient-editor-load-left-05", left_editable); + SET_SENSITIVE ("gradient-editor-load-left-06", left_editable); + SET_SENSITIVE ("gradient-editor-load-left-07", left_editable); + SET_SENSITIVE ("gradient-editor-load-left-08", left_editable); + SET_SENSITIVE ("gradient-editor-load-left-09", left_editable); + SET_SENSITIVE ("gradient-editor-load-left-10", left_editable); SET_COLOR ("gradient-editor-load-left-01", &editor->saved_colors[0], TRUE); SET_COLOR ("gradient-editor-load-left-02", &editor->saved_colors[1], TRUE); @@ -529,36 +665,66 @@ gradient_editor_actions_update (GimpActionGroup *group, SET_COLOR ("gradient-editor-save-left-09", &editor->saved_colors[8], TRUE); SET_COLOR ("gradient-editor-save-left-10", &editor->saved_colors[9], TRUE); - SET_SENSITIVE ("gradient-editor-right-color", editable); + SET_SENSITIVE ("gradient-editor-right-color-fixed", editable); + SET_SENSITIVE ("gradient-editor-right-color-foreground", editable); + SET_SENSITIVE ("gradient-editor-right-color-foreground-transparent", editable); + SET_SENSITIVE ("gradient-editor-right-color-background", editable); + SET_SENSITIVE ("gradient-editor-right-color-background-transparent", editable); + + if (gradient) + { + switch (editor->control_sel_r->right_color_type) + { + case GIMP_GRADIENT_COLOR_FIXED: + SET_ACTIVE ("gradient-editor-right-color-fixed", TRUE); + break; + case GIMP_GRADIENT_COLOR_FOREGROUND: + SET_ACTIVE ("gradient-editor-right-color-foreground", TRUE); + break; + case GIMP_GRADIENT_COLOR_FOREGROUND_TRANSPARENT: + SET_ACTIVE ("gradient-editor-right-color-foreground-transparent", TRUE); + break; + case GIMP_GRADIENT_COLOR_BACKGROUND: + SET_ACTIVE ("gradient-editor-right-color-background", TRUE); + break; + case GIMP_GRADIENT_COLOR_BACKGROUND_TRANSPARENT: + SET_ACTIVE ("gradient-editor-right-color-background-transparent", TRUE); + break; + } + } + + SET_SENSITIVE ("gradient-editor-right-color", right_editable); SET_SENSITIVE ("gradient-editor-load-right-right-neighbor", editable); SET_SENSITIVE ("gradient-editor-load-right-left-endpoint", editable); if (gradient) { SET_COLOR ("gradient-editor-right-color", - &editor->control_sel_r->right_color, FALSE); + &right_color, FALSE); SET_COLOR ("gradient-editor-load-right-right-neighbor", - &right_seg->left_color, FALSE); + &right_seg_color, FALSE); SET_COLOR ("gradient-editor-load-right-left-endpoint", - &editor->control_sel_l->left_color, FALSE); + &left_color, FALSE); } - SET_SENSITIVE ("gradient-editor-load-right-fg", editable); - SET_SENSITIVE ("gradient-editor-load-right-bg", editable); + SET_SENSITIVE ("gradient-editor-load-right-fg", right_editable); + SET_SENSITIVE ("gradient-editor-load-right-bg", right_editable); - SET_COLOR ("gradient-editor-load-right-fg", context ? &fg : NULL, FALSE); - SET_COLOR ("gradient-editor-load-right-bg", context ? &bg : NULL, FALSE); + SET_COLOR ("gradient-editor-load-right-fg", + data_editor->context ? &fg : NULL, FALSE); + SET_COLOR ("gradient-editor-load-right-bg", + data_editor->context ? &bg : NULL, FALSE); - SET_SENSITIVE ("gradient-editor-load-right-01", editable); - SET_SENSITIVE ("gradient-editor-load-right-02", editable); - SET_SENSITIVE ("gradient-editor-load-right-03", editable); - SET_SENSITIVE ("gradient-editor-load-right-04", editable); - SET_SENSITIVE ("gradient-editor-load-right-05", editable); - SET_SENSITIVE ("gradient-editor-load-right-06", editable); - SET_SENSITIVE ("gradient-editor-load-right-07", editable); - SET_SENSITIVE ("gradient-editor-load-right-08", editable); - SET_SENSITIVE ("gradient-editor-load-right-09", editable); - SET_SENSITIVE ("gradient-editor-load-right-10", editable); + SET_SENSITIVE ("gradient-editor-load-right-01", right_editable); + SET_SENSITIVE ("gradient-editor-load-right-02", right_editable); + SET_SENSITIVE ("gradient-editor-load-right-03", right_editable); + SET_SENSITIVE ("gradient-editor-load-right-04", right_editable); + SET_SENSITIVE ("gradient-editor-load-right-05", right_editable); + SET_SENSITIVE ("gradient-editor-load-right-06", right_editable); + SET_SENSITIVE ("gradient-editor-load-right-07", right_editable); + SET_SENSITIVE ("gradient-editor-load-right-08", right_editable); + SET_SENSITIVE ("gradient-editor-load-right-09", right_editable); + SET_SENSITIVE ("gradient-editor-load-right-10", right_editable); SET_COLOR ("gradient-editor-load-right-01", &editor->saved_colors[0], TRUE); SET_COLOR ("gradient-editor-load-right-02", &editor->saved_colors[1], TRUE); diff --git a/app/actions/gradient-editor-commands.c b/app/actions/gradient-editor-commands.c index 5ef1f9e5cb..fc72f7f7fd 100644 --- a/app/actions/gradient-editor-commands.c +++ b/app/actions/gradient-editor-commands.c @@ -106,21 +106,58 @@ gradient_editor_left_color_cmd_callback (GtkAction *action, gtk_window_present (GTK_WINDOW (editor->color_dialog)); } +void +gradient_editor_left_color_type_cmd_callback (GtkAction *action, + GtkAction *current, + gpointer data) +{ + GimpGradientEditor *editor = GIMP_GRADIENT_EDITOR (data); + GimpGradient *gradient; + gint value; + + gradient = GIMP_GRADIENT (GIMP_DATA_EDITOR (editor)->data); + + value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action)); + + if (gradient && value >= 0) + { + GimpGradientColor color_type = value; + GimpRGB color; + + gimp_gradient_get_color_at (gradient, + GIMP_DATA_EDITOR (editor)->context, + editor->control_sel_l, + editor->control_sel_l->left, FALSE, + &color); + + gimp_data_freeze (GIMP_DATA (gradient)); + + gimp_gradient_segment_set_left_color_type (gradient, + editor->control_sel_l, + color_type); + + if (color_type == GIMP_GRADIENT_COLOR_FIXED) + gimp_gradient_segment_set_left_color (gradient, + editor->control_sel_l, + &color); + + gimp_data_thaw (GIMP_DATA (gradient)); + } +} + void gradient_editor_load_left_cmd_callback (GtkAction *action, gint value, gpointer data) { - GimpGradientEditor *editor = GIMP_GRADIENT_EDITOR (data); + GimpGradientEditor *editor = GIMP_GRADIENT_EDITOR (data); + GimpDataEditor *data_editor = GIMP_DATA_EDITOR (data); GimpGradient *gradient; - GimpContext *context; GimpGradientSegment *seg; GimpRGB color; + GimpGradientColor color_type = GIMP_GRADIENT_COLOR_FIXED; - gradient = GIMP_GRADIENT (GIMP_DATA_EDITOR (editor)->data); - - context = - gimp_get_user_context (GIMP_DATA_EDITOR (editor)->data_factory->gimp); + gradient = GIMP_GRADIENT (data_editor->data); switch (value) { @@ -130,19 +167,21 @@ gradient_editor_load_left_cmd_callback (GtkAction *action, else seg = gimp_gradient_segment_get_last (editor->control_sel_l); - color = seg->right_color; + color = seg->right_color; + color_type = seg->right_color_type; break; case GRADIENT_EDITOR_COLOR_OTHER_ENDPOINT: - color = editor->control_sel_r->right_color; + color = editor->control_sel_r->right_color; + color_type = editor->control_sel_l->right_color_type; break; case GRADIENT_EDITOR_COLOR_FOREGROUND: - gimp_context_get_foreground (context, &color); + gimp_context_get_foreground (data_editor->context, &color); break; case GRADIENT_EDITOR_COLOR_BACKGROUND: - gimp_context_get_background (context, &color); + gimp_context_get_background (data_editor->context, &color); break; default: /* Load a color */ @@ -150,12 +189,19 @@ gradient_editor_load_left_cmd_callback (GtkAction *action, break; } + gimp_data_freeze (GIMP_DATA (gradient)); + gimp_gradient_segment_range_blend (gradient, editor->control_sel_l, editor->control_sel_r, &color, &editor->control_sel_r->right_color, TRUE, TRUE); + gimp_gradient_segment_set_left_color_type (gradient, + editor->control_sel_l, + color_type); + + gimp_data_thaw (GIMP_DATA (gradient)); } void @@ -210,21 +256,58 @@ gradient_editor_right_color_cmd_callback (GtkAction *action, gtk_window_present (GTK_WINDOW (editor->color_dialog)); } +void +gradient_editor_right_color_type_cmd_callback (GtkAction *action, + GtkAction *current, + gpointer data) +{ + GimpGradientEditor *editor = GIMP_GRADIENT_EDITOR (data); + GimpGradient *gradient; + gint value; + + gradient = GIMP_GRADIENT (GIMP_DATA_EDITOR (editor)->data); + + value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action)); + + if (gradient && value >= 0) + { + GimpGradientColor color_type = value; + GimpRGB color; + + gimp_gradient_get_color_at (gradient, + GIMP_DATA_EDITOR (editor)->context, + editor->control_sel_r, + editor->control_sel_r->right, FALSE, + &color); + + gimp_data_freeze (GIMP_DATA (gradient)); + + gimp_gradient_segment_set_right_color_type (gradient, + editor->control_sel_r, + color_type); + + if (color_type == GIMP_GRADIENT_COLOR_FIXED) + gimp_gradient_segment_set_right_color (gradient, + editor->control_sel_r, + &color); + + gimp_data_thaw (GIMP_DATA (gradient)); + } +} + void gradient_editor_load_right_cmd_callback (GtkAction *action, gint value, gpointer data) { - GimpGradientEditor *editor = GIMP_GRADIENT_EDITOR (data); + GimpGradientEditor *editor = GIMP_GRADIENT_EDITOR (data); + GimpDataEditor *data_editor = GIMP_DATA_EDITOR (data); GimpGradient *gradient; - GimpContext *context; GimpGradientSegment *seg; GimpRGB color; + GimpGradientColor color_type = GIMP_GRADIENT_COLOR_FIXED; - gradient = GIMP_GRADIENT (GIMP_DATA_EDITOR (editor)->data); - - context = - gimp_get_user_context (GIMP_DATA_EDITOR (editor)->data_factory->gimp); + gradient = GIMP_GRADIENT (data_editor->data); switch (value) { @@ -234,19 +317,21 @@ gradient_editor_load_right_cmd_callback (GtkAction *action, else seg = gimp_gradient_segment_get_first (editor->control_sel_r); - color = seg->left_color; + color = seg->left_color; + color_type = seg->left_color_type; break; case GRADIENT_EDITOR_COLOR_OTHER_ENDPOINT: - color = editor->control_sel_l->left_color; + color = editor->control_sel_l->left_color; + color_type = editor->control_sel_l->left_color_type; break; case GRADIENT_EDITOR_COLOR_FOREGROUND: - gimp_context_get_foreground (context, &color); + gimp_context_get_foreground (data_editor->context, &color); break; case GRADIENT_EDITOR_COLOR_BACKGROUND: - gimp_context_get_background (context, &color); + gimp_context_get_background (data_editor->context, &color); break; default: /* Load a color */ @@ -254,12 +339,19 @@ gradient_editor_load_right_cmd_callback (GtkAction *action, break; } + gimp_data_freeze (GIMP_DATA (gradient)); + gimp_gradient_segment_range_blend (gradient, editor->control_sel_l, editor->control_sel_r, &editor->control_sel_l->left_color, &color, TRUE, TRUE); + gimp_gradient_segment_set_right_color_type (gradient, + editor->control_sel_l, + color_type); + + gimp_data_thaw (GIMP_DATA (gradient)); } void diff --git a/app/actions/gradient-editor-commands.h b/app/actions/gradient-editor-commands.h index f689d9bd52..10c163a57e 100644 --- a/app/actions/gradient-editor-commands.h +++ b/app/actions/gradient-editor-commands.h @@ -30,54 +30,60 @@ enum }; -void gradient_editor_left_color_cmd_callback (GtkAction *action, - gpointer data); -void gradient_editor_load_left_cmd_callback (GtkAction *action, - gint value, - gpointer data); -void gradient_editor_save_left_cmd_callback (GtkAction *action, - gint value, - gpointer data); +void gradient_editor_left_color_cmd_callback (GtkAction *action, + gpointer data); +void gradient_editor_left_color_type_cmd_callback (GtkAction *action, + GtkAction *current, + gpointer data); +void gradient_editor_load_left_cmd_callback (GtkAction *action, + gint value, + gpointer data); +void gradient_editor_save_left_cmd_callback (GtkAction *action, + gint value, + gpointer data); -void gradient_editor_right_color_cmd_callback (GtkAction *action, - gpointer data); -void gradient_editor_load_right_cmd_callback (GtkAction *action, - gint value, - gpointer data); -void gradient_editor_save_right_cmd_callback (GtkAction *action, - gint value, - gpointer data); +void gradient_editor_right_color_cmd_callback (GtkAction *action, + gpointer data); +void gradient_editor_right_color_type_cmd_callback (GtkAction *action, + GtkAction *current, + gpointer data); +void gradient_editor_load_right_cmd_callback (GtkAction *action, + gint value, + gpointer data); +void gradient_editor_save_right_cmd_callback (GtkAction *action, + gint value, + gpointer data); -void gradient_editor_blending_func_cmd_callback (GtkAction *action, - GtkAction *current, - gpointer data); -void gradient_editor_coloring_type_cmd_callback (GtkAction *action, - GtkAction *current, - gpointer data); +void gradient_editor_blending_func_cmd_callback (GtkAction *action, + GtkAction *current, + gpointer data); +void gradient_editor_coloring_type_cmd_callback (GtkAction *action, + GtkAction *current, + gpointer data); -void gradient_editor_flip_cmd_callback (GtkAction *action, - gpointer data); -void gradient_editor_replicate_cmd_callback (GtkAction *action, - gpointer data); -void gradient_editor_split_midpoint_cmd_callback (GtkAction *action, - gpointer data); -void gradient_editor_split_uniformly_cmd_callback (GtkAction *action, - gpointer data); -void gradient_editor_delete_cmd_callback (GtkAction *action, - gpointer data); -void gradient_editor_recenter_cmd_callback (GtkAction *action, - gpointer data); -void gradient_editor_redistribute_cmd_callback (GtkAction *action, - gpointer data); +void gradient_editor_flip_cmd_callback (GtkAction *action, + gpointer data); +void gradient_editor_replicate_cmd_callback (GtkAction *action, + gpointer data); +void gradient_editor_split_midpoint_cmd_callback (GtkAction *action, + gpointer data); +void gradient_editor_split_uniformly_cmd_callback (GtkAction *action, + gpointer data); +void gradient_editor_delete_cmd_callback (GtkAction *action, + gpointer data); +void gradient_editor_recenter_cmd_callback (GtkAction *action, + gpointer data); +void gradient_editor_redistribute_cmd_callback (GtkAction *action, + gpointer data); -void gradient_editor_blend_color_cmd_callback (GtkAction *action, - gpointer data); -void gradient_editor_blend_opacity_cmd_callback (GtkAction *action, - gpointer data); +void gradient_editor_blend_color_cmd_callback (GtkAction *action, + gpointer data); +void gradient_editor_blend_opacity_cmd_callback (GtkAction *action, + gpointer data); -void gradient_editor_zoom_cmd_callback (GtkAction *action, - gint value, - gpointer data); +void gradient_editor_zoom_cmd_callback (GtkAction *action, + gint value, + gpointer data); #endif /* __GRADIENT_EDITOR_COMMANDS_H__ */ diff --git a/app/actions/palette-editor-actions.c b/app/actions/palette-editor-actions.c index 050aebb6a3..5ae588c370 100644 --- a/app/actions/palette-editor-actions.c +++ b/app/actions/palette-editor-actions.c @@ -131,15 +131,12 @@ palette_editor_actions_update (GimpActionGroup *group, { GimpPaletteEditor *editor = GIMP_PALETTE_EDITOR (user_data); GimpDataEditor *data_editor = GIMP_DATA_EDITOR (user_data); - GimpContext *context; GimpData *data; gboolean editable = FALSE; GimpRGB fg; GimpRGB bg; gboolean edit_active = FALSE; - context = gimp_get_user_context (group->gimp); - data = data_editor->data; if (data) @@ -148,10 +145,10 @@ palette_editor_actions_update (GimpActionGroup *group, editable = TRUE; } - if (context) + if (data_editor->context) { - gimp_context_get_foreground (context, &fg); - gimp_context_get_background (context, &bg); + gimp_context_get_foreground (data_editor->context, &fg); + gimp_context_get_background (data_editor->context, &bg); } edit_active = gimp_data_editor_get_edit_active (data_editor); @@ -169,8 +166,8 @@ palette_editor_actions_update (GimpActionGroup *group, SET_SENSITIVE ("palette-editor-new-color-fg", editable); SET_SENSITIVE ("palette-editor-new-color-bg", editable); - SET_COLOR ("palette-editor-new-color-fg", context ? &fg : NULL); - SET_COLOR ("palette-editor-new-color-bg", context ? &bg : NULL); + SET_COLOR ("palette-editor-new-color-fg", data_editor->context ? &fg : NULL); + SET_COLOR ("palette-editor-new-color-bg", data_editor->context ? &bg : NULL); SET_SENSITIVE ("palette-editor-zoom-out", data); SET_SENSITIVE ("palette-editor-zoom-in", data); diff --git a/app/actions/palette-editor-commands.c b/app/actions/palette-editor-commands.c index 622b627702..0ce3adb79a 100644 --- a/app/actions/palette-editor-commands.c +++ b/app/actions/palette-editor-commands.c @@ -104,15 +104,12 @@ palette_editor_new_color_cmd_callback (GtkAction *action, if (data_editor->data_editable) { GimpPalette *palette = GIMP_PALETTE (data_editor->data); - GimpContext *context; GimpRGB color; - context = gimp_get_user_context (data_editor->data_factory->gimp); - if (value) - gimp_context_get_background (context, &color); + gimp_context_get_background (data_editor->context, &color); else - gimp_context_get_foreground (context, &color); + gimp_context_get_foreground (data_editor->context, &color); editor->color = gimp_palette_add_entry (palette, -1, NULL, &color); } diff --git a/menus/gradient-editor-menu.xml b/menus/gradient-editor-menu.xml index e4570d5871..85fcbb17e4 100644 --- a/menus/gradient-editor-menu.xml +++ b/menus/gradient-editor-menu.xml @@ -3,6 +3,13 @@ + + + + + + + @@ -34,6 +41,13 @@ + + + + + + +