app: GimpColorDialog now fully uses GeglColor.

This commit is contained in:
Jehan 2023-12-21 01:05:15 +09:00
parent 4b3702bfc1
commit 636a33aed2
8 changed files with 65 additions and 160 deletions

View file

@ -80,7 +80,7 @@
/* local function prototypes */
static void view_padding_color_dialog_update (GimpColorDialog *dialog,
const GimpRGB *color,
GeglColor *color,
GimpColorDialogState state,
GimpDisplayShell *shell);
@ -1066,9 +1066,7 @@ view_padding_color_cmd_callback (GimpAction *action,
{
GimpImage *image = gimp_display_get_image (display);
GimpDisplayShell *shell = gimp_display_get_shell (display);
GimpRGB rgb;
gegl_color_get_pixel (options->padding_color, babl_format ("R'G'B'A double"), &rgb);
dialog =
gimp_color_dialog_new (GIMP_VIEWABLE (image),
action_data_get_context (data),
@ -1078,7 +1076,7 @@ view_padding_color_cmd_callback (GimpAction *action,
_("Set Custom Canvas Padding Color"),
GTK_WIDGET (shell),
NULL, NULL,
&rgb,
options->padding_color,
TRUE, FALSE);
g_signal_connect (dialog, "update",
@ -1176,20 +1174,16 @@ view_fullscreen_cmd_callback (GimpAction *action,
static void
view_padding_color_dialog_update (GimpColorDialog *dialog,
const GimpRGB *rgb,
GeglColor *color,
GimpColorDialogState state,
GimpDisplayShell *shell)
{
GimpImageWindow *window;
GimpDisplayOptions *options;
GeglColor *color;
GeglColor *old_color;
GimpCanvasPaddingMode old_padding_mode;
gboolean fullscreen;
color = gegl_color_new (NULL);
gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgb);
window = gimp_display_shell_get_window (shell);
old_color = g_object_get_data (G_OBJECT (dialog), "old-color");
old_padding_mode = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (dialog), "old-padding-mode"));
@ -1231,6 +1225,4 @@ view_padding_color_dialog_update (GimpColorDialog *dialog,
default:
break;
}
g_object_unref (color);
}

View file

@ -137,7 +137,7 @@ gimp_color_dialog_class_init (GimpColorDialogClass *klass)
NULL, NULL,
gimp_marshal_VOID__BOXED_ENUM,
G_TYPE_NONE, 2,
GIMP_TYPE_RGB,
GEGL_TYPE_COLOR,
GIMP_TYPE_COLOR_DIALOG_STATE);
g_object_class_install_property (object_class, PROP_USER_CONTEXT_AWARE,
@ -336,7 +336,6 @@ gimp_color_dialog_response (GtkDialog *gtk_dialog,
GimpColormapSelection *colormap_selection;
gint col_index;
GeglColor *color = NULL;
GimpRGB rgb;
colormap_selection = GIMP_COLORMAP_SELECTION (dialog->colormap_selection);
col_index = gimp_colormap_selection_get_index (colormap_selection, NULL);
@ -356,7 +355,6 @@ gimp_color_dialog_response (GtkDialog *gtk_dialog,
case GTK_RESPONSE_OK:
color = gimp_color_selection_get_color (GIMP_COLOR_SELECTION (dialog->selection));
gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb);
if (dialog->colormap_editing && image)
{
@ -372,14 +370,14 @@ gimp_color_dialog_response (GtkDialog *gtk_dialog,
gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "colormap");
g_signal_emit (dialog, color_dialog_signals[UPDATE], 0,
&rgb, GIMP_COLOR_DIALOG_UPDATE);
color, GIMP_COLOR_DIALOG_UPDATE);
g_object_unref (old_color);
}
else
{
g_signal_emit (dialog, color_dialog_signals[UPDATE], 0,
&rgb, GIMP_COLOR_DIALOG_OK);
color, GIMP_COLOR_DIALOG_OK);
}
g_object_unref (color);
@ -387,7 +385,6 @@ gimp_color_dialog_response (GtkDialog *gtk_dialog,
default:
color = gimp_color_selection_get_old_color (GIMP_COLOR_SELECTION (dialog->selection));
gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb);
if (dialog->colormap_editing && image)
{
@ -398,12 +395,12 @@ gimp_color_dialog_response (GtkDialog *gtk_dialog,
gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "colormap");
g_signal_emit (dialog, color_dialog_signals[UPDATE], 0,
&rgb, GIMP_COLOR_DIALOG_UPDATE);
color, GIMP_COLOR_DIALOG_UPDATE);
}
else
{
g_signal_emit (dialog, color_dialog_signals[UPDATE], 0,
&rgb, GIMP_COLOR_DIALOG_CANCEL);
color, GIMP_COLOR_DIALOG_CANCEL);
}
g_object_unref (color);
@ -424,13 +421,12 @@ gimp_color_dialog_new (GimpViewable *viewable,
GtkWidget *parent,
GimpDialogFactory *dialog_factory,
const gchar *dialog_identifier,
const GimpRGB *rgb,
GeglColor *color,
gboolean wants_updates,
gboolean show_alpha)
{
GimpColorDialog *dialog;
const gchar *role;
GeglColor *color;
gboolean use_header_bar;
g_return_val_if_fail (viewable == NULL || GIMP_IS_VIEWABLE (viewable), NULL);
@ -440,7 +436,7 @@ gimp_color_dialog_new (GimpViewable *viewable,
GIMP_IS_DIALOG_FACTORY (dialog_factory), NULL);
g_return_val_if_fail (dialog_factory == NULL || dialog_identifier != NULL,
NULL);
g_return_val_if_fail (rgb != NULL, NULL);
g_return_val_if_fail (GEGL_IS_COLOR (color), NULL);
role = dialog_identifier ? dialog_identifier : "gimp-color-selector";
@ -511,55 +507,41 @@ gimp_color_dialog_new (GimpViewable *viewable,
g_object_set_data (G_OBJECT (context->gimp->config->color_management),
"gimp-context", NULL);
color = gegl_color_new (NULL);
gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgb);
gimp_color_selection_set_color (GIMP_COLOR_SELECTION (dialog->selection),
color);
gimp_color_selection_set_old_color (GIMP_COLOR_SELECTION (dialog->selection),
color);
g_object_unref (color);
return GTK_WIDGET (dialog);
}
void
gimp_color_dialog_set_color (GimpColorDialog *dialog,
const GimpRGB *rgb)
GeglColor *color)
{
GeglColor *color;
g_return_if_fail (GIMP_IS_COLOR_DIALOG (dialog));
g_return_if_fail (rgb != NULL);
g_return_if_fail (GEGL_IS_COLOR (color));
g_signal_handlers_block_by_func (dialog->selection,
gimp_color_dialog_color_changed,
dialog);
color = gegl_color_new (NULL);
gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgb);
gimp_color_selection_set_color (GIMP_COLOR_SELECTION (dialog->selection),
color);
gimp_color_selection_set_old_color (GIMP_COLOR_SELECTION (dialog->selection),
color);
g_object_unref (color);
g_signal_handlers_unblock_by_func (dialog->selection,
gimp_color_dialog_color_changed,
dialog);
}
void
gimp_color_dialog_get_color (GimpColorDialog *dialog,
GimpRGB *rgb)
GeglColor *
gimp_color_dialog_get_color (GimpColorDialog *dialog)
{
GeglColor *color;
g_return_val_if_fail (GIMP_IS_COLOR_DIALOG (dialog), NULL);
g_return_if_fail (GIMP_IS_COLOR_DIALOG (dialog));
g_return_if_fail (rgb != NULL);
color = gimp_color_selection_get_color (GIMP_COLOR_SELECTION (dialog->selection));
gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), rgb);
g_object_unref (color);
return gimp_color_selection_get_color (GIMP_COLOR_SELECTION (dialog->selection));
}
@ -588,16 +570,11 @@ gimp_color_dialog_colormap_clicked (GimpColorDialog *dialog,
GimpPaletteEntry *entry,
GdkModifierType state)
{
GimpRGB rgb;
gegl_color_get_pixel (entry->color, babl_format ("R'G'B'A double"), &rgb);
gimp_color_dialog_set_color (dialog, &rgb);
gimp_color_dialog_set_color (dialog, entry->color);
if (dialog->wants_updates)
{
g_signal_emit (dialog, color_dialog_signals[UPDATE], 0,
&entry->color, GIMP_COLOR_DIALOG_UPDATE);
}
g_signal_emit (dialog, color_dialog_signals[UPDATE], 0,
entry->color, GIMP_COLOR_DIALOG_UPDATE);
}
static void
@ -605,7 +582,6 @@ gimp_color_dialog_colormap_edit_activate (GimpColorDialog *dialog)
{
GimpColormapSelection *colormap_selection;
GeglColor *color;
GimpRGB rgb;
gint col_index;
dialog->colormap_editing = TRUE;
@ -613,8 +589,7 @@ gimp_color_dialog_colormap_edit_activate (GimpColorDialog *dialog)
colormap_selection = GIMP_COLORMAP_SELECTION (dialog->colormap_selection);
col_index = gimp_colormap_selection_get_index (colormap_selection, NULL);
color = gimp_image_get_colormap_entry (dialog->active_image, col_index);
gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb);
gimp_color_dialog_set_color (dialog, &rgb);
gimp_color_dialog_set_color (dialog, color);
gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "color");
}
@ -681,13 +656,8 @@ gimp_color_dialog_color_changed (GimpColorSelection *selection,
}
if (dialog->wants_updates)
{
GimpRGB rgb;
gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb);
g_signal_emit (dialog, color_dialog_signals[UPDATE], 0,
&rgb, GIMP_COLOR_DIALOG_UPDATE);
}
g_signal_emit (dialog, color_dialog_signals[UPDATE], 0,
color, GIMP_COLOR_DIALOG_UPDATE);
g_object_unref (color);
}

View file

@ -57,7 +57,7 @@ struct _GimpColorDialogClass
GimpViewableDialogClass parent_class;
void (* update) (GimpColorDialog *dialog,
const GimpRGB *color,
GeglColor *color,
GimpColorDialogState state);
};
@ -73,14 +73,13 @@ GtkWidget * gimp_color_dialog_new (GimpViewable *viewable,
GtkWidget *parent,
GimpDialogFactory *dialog_factory,
const gchar *dialog_identifier,
const GimpRGB *color,
GeglColor *color,
gboolean wants_update,
gboolean show_alpha);
void gimp_color_dialog_set_color (GimpColorDialog *dialog,
const GimpRGB *color);
void gimp_color_dialog_get_color (GimpColorDialog *dialog,
GimpRGB *color);
GeglColor *color);
GeglColor * gimp_color_dialog_get_color (GimpColorDialog *dialog);
#endif /* __GIMP_COLOR_DIALOG_H__ */

View file

@ -54,9 +54,9 @@ static void gimp_colormap_editor_set_context (GimpDocked
GimpContext *context);
static void gimp_colormap_editor_color_update (GimpColorDialog *dialog,
const GimpRGB *color,
GimpColorDialogState state,
GimpColormapEditor *editor);
GeglColor *color,
GimpColorDialogState state,
GimpColormapEditor *editor);
static gboolean gimp_colormap_editor_entry_button_press (GtkWidget *widget,
GdkEvent *event,
@ -226,7 +226,6 @@ gimp_colormap_editor_edit_color (GimpColormapEditor *editor)
{
GimpImage *image;
GeglColor *color;
GimpRGB rgb;
gchar *desc;
gint index;
@ -241,7 +240,6 @@ gimp_colormap_editor_edit_color (GimpColormapEditor *editor)
return;
color = gimp_image_get_colormap_entry (image, index);
gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb);
desc = g_strdup_printf (_("Edit colormap entry #%d"), index);
@ -257,8 +255,7 @@ gimp_colormap_editor_edit_color (GimpColormapEditor *editor)
GTK_WIDGET (editor),
gimp_dialog_factory_get_singleton (),
"gimp-colormap-editor-color-dialog",
(const GimpRGB *) &rgb,
TRUE, FALSE);
color, TRUE, FALSE);
g_signal_connect (editor->color_dialog, "destroy",
G_CALLBACK (gtk_widget_destroyed),
@ -274,8 +271,7 @@ gimp_colormap_editor_edit_color (GimpColormapEditor *editor)
g_list_prepend (NULL, image),
GIMP_IMAGE_EDITOR (editor)->context);
g_object_set (editor->color_dialog, "description", desc, NULL);
gimp_color_dialog_set_color (GIMP_COLOR_DIALOG (editor->color_dialog),
&rgb);
gimp_color_dialog_set_color (GIMP_COLOR_DIALOG (editor->color_dialog), color);
if (! gtk_widget_get_visible (editor->color_dialog))
gimp_dialog_factory_position_dialog (gimp_dialog_factory_get_singleton (),
@ -355,7 +351,7 @@ gimp_colormap_editor_max_index (GimpColormapEditor *editor)
static void
gimp_colormap_editor_color_update (GimpColorDialog *dialog,
const GimpRGB *rgb,
GeglColor *color,
GimpColorDialogState state,
GimpColormapEditor *editor)
{
@ -367,18 +363,12 @@ gimp_colormap_editor_color_update (GimpColorDialog *dialog,
{
case GIMP_COLOR_DIALOG_OK:
{
GeglColor *color = gegl_color_new ("black");
push_undo = TRUE;
gegl_color_set_rgba_with_space (color, rgb->r, rgb->g, rgb->b, rgb->a, NULL);
if (state & gimp_get_toggle_behavior_mask ())
gimp_context_set_background (image_editor->context, color);
else
gimp_context_set_foreground (image_editor->context, color);
g_object_unref (color);
}
/* Fall through */
@ -392,8 +382,7 @@ gimp_colormap_editor_color_update (GimpColorDialog *dialog,
if (image)
{
GeglColor *color = gegl_color_new (NULL);
gint col_index;
gint col_index;
col_index = gimp_colormap_selection_get_index (GIMP_COLORMAP_SELECTION (editor->selection),
NULL);
@ -409,15 +398,12 @@ gimp_colormap_editor_color_update (GimpColorDialog *dialog,
g_object_unref (old_color);
}
gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgb);
gimp_image_set_colormap_entry (image, col_index, color, push_undo);
if (push_undo)
gimp_image_flush (image);
else
gimp_projection_flush (gimp_image_get_projection (image));
g_object_unref (color);
}
}

View file

@ -59,7 +59,7 @@ static void gimp_color_panel_color_changed (GimpColorButton *button);
static GType gimp_color_panel_get_action_type (GimpColorButton *button);
static void gimp_color_panel_dialog_update (GimpColorDialog *dialog,
const GimpRGB *color,
GeglColor *color,
GimpColorDialogState state,
GimpColorPanel *panel);
@ -177,10 +177,8 @@ gimp_color_panel_clicked (GtkButton *button)
{
GimpColorPanel *panel = GIMP_COLOR_PANEL (button);
GeglColor *color;
GimpRGB rgb;
color = gimp_color_button_get_color (GIMP_COLOR_BUTTON (button));
gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb);
if (! panel->color_dialog)
{
@ -191,8 +189,7 @@ gimp_color_panel_clicked (GtkButton *button)
gimp_color_button_get_title (color_button),
NULL, NULL,
GTK_WIDGET (button),
NULL, NULL,
&rgb,
NULL, NULL, color,
gimp_color_button_get_update (color_button),
gimp_color_button_has_alpha (color_button));
@ -206,8 +203,7 @@ gimp_color_panel_clicked (GtkButton *button)
}
else
{
gimp_color_dialog_set_color (GIMP_COLOR_DIALOG (panel->color_dialog),
&rgb);
gimp_color_dialog_set_color (GIMP_COLOR_DIALOG (panel->color_dialog), color);
}
gtk_window_present (GTK_WINDOW (panel->color_dialog));
@ -253,23 +249,17 @@ gimp_color_panel_color_changed (GimpColorButton *button)
if (panel->color_dialog)
{
GeglColor *color;
GimpRGB dialog_color;
GimpRGB rgb;
GeglColor *dialog_color;
color = gimp_color_button_get_color (GIMP_COLOR_BUTTON (button));
gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb);
gimp_color_dialog_get_color (GIMP_COLOR_DIALOG (panel->color_dialog),
&dialog_color);
dialog_color = gimp_color_dialog_get_color (GIMP_COLOR_DIALOG (panel->color_dialog));
if (gimp_rgba_distance (&rgb, &dialog_color) > RGBA_EPSILON ||
rgb.a != dialog_color.a)
{
gimp_color_dialog_set_color (GIMP_COLOR_DIALOG (panel->color_dialog),
&rgb);
}
if (! gimp_color_is_perceptually_identical (color, dialog_color))
gimp_color_dialog_set_color (GIMP_COLOR_DIALOG (panel->color_dialog), color);
g_object_unref (color);
g_object_unref (dialog_color);
}
}
@ -304,18 +294,14 @@ gimp_color_panel_dialog_response (GimpColorPanel *panel,
static void
gimp_color_panel_dialog_update (GimpColorDialog *dialog,
const GimpRGB *rgb,
GeglColor *color,
GimpColorDialogState state,
GimpColorPanel *panel)
{
GeglColor *color = gegl_color_new (NULL);
gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgb);
switch (state)
{
case GIMP_COLOR_DIALOG_UPDATE:
if (gimp_color_button_get_update (GIMP_COLOR_BUTTON (panel)))
if (gimp_color_button_get_update (GIMP_COLOR_BUTTON (panel)) && color)
gimp_color_button_set_color (GIMP_COLOR_BUTTON (panel), color);
break;
@ -324,13 +310,12 @@ gimp_color_panel_dialog_update (GimpColorDialog *dialog,
/* GimpColorDialog returns the appropriate color (new one or
* original one if process cancelled.
*/
gimp_color_button_set_color (GIMP_COLOR_BUTTON (panel), color);
if (color)
gimp_color_button_set_color (GIMP_COLOR_BUTTON (panel), color);
gtk_widget_hide (panel->color_dialog);
g_signal_emit (panel, color_panel_signals[RESPONSE], 0,
state);
break;
}
g_object_unref (color);
}

View file

@ -157,11 +157,11 @@ static void gradient_editor_replace_selection (GimpGradientEditor *editor,
GimpGradientSegment *replace_seg);
static void gradient_editor_left_color_update (GimpColorDialog *dialog,
const GimpRGB *color,
GeglColor *color,
GimpColorDialogState state,
GimpGradientEditor *editor);
static void gradient_editor_right_color_update (GimpColorDialog *dialog,
const GimpRGB *color,
GeglColor *color,
GimpColorDialogState state,
GimpGradientEditor *editor);
@ -602,7 +602,6 @@ void
gimp_gradient_editor_edit_left_color (GimpGradientEditor *editor)
{
GimpGradient *gradient;
GimpRGB rgb;
g_return_if_fail (GIMP_IS_GRADIENT_EDITOR (editor));
@ -616,8 +615,6 @@ gimp_gradient_editor_edit_left_color (GimpGradientEditor *editor)
editor->saved_dirty = gimp_data_is_dirty (GIMP_DATA (gradient));
editor->saved_segments = gradient_editor_save_selection (editor);
gegl_color_get_pixel (editor->control_sel_l->left_color, babl_format ("R'G'B'A double"),
&rgb);
editor->color_dialog =
gimp_color_dialog_new (GIMP_VIEWABLE (gradient),
GIMP_DATA_EDITOR (editor)->context,
@ -628,7 +625,7 @@ gimp_gradient_editor_edit_left_color (GimpGradientEditor *editor)
GTK_WIDGET (editor),
gimp_dialog_factory_get_singleton (),
"gimp-gradient-editor-color-dialog",
&rgb,
editor->control_sel_l->left_color,
TRUE, TRUE);
g_signal_connect (editor->color_dialog, "destroy",
@ -650,7 +647,6 @@ void
gimp_gradient_editor_edit_right_color (GimpGradientEditor *editor)
{
GimpGradient *gradient;
GimpRGB rgb;
g_return_if_fail (GIMP_IS_GRADIENT_EDITOR (editor));
@ -664,8 +660,6 @@ gimp_gradient_editor_edit_right_color (GimpGradientEditor *editor)
editor->saved_dirty = gimp_data_is_dirty (GIMP_DATA (gradient));
editor->saved_segments = gradient_editor_save_selection (editor);
gegl_color_get_pixel (editor->control_sel_l->right_color, babl_format ("R'G'B'A double"),
&rgb);
editor->color_dialog =
gimp_color_dialog_new (GIMP_VIEWABLE (gradient),
GIMP_DATA_EDITOR (editor)->context,
@ -676,7 +670,8 @@ gimp_gradient_editor_edit_right_color (GimpGradientEditor *editor)
GTK_WIDGET (editor),
gimp_dialog_factory_get_singleton (),
"gimp-gradient-editor-color-dialog",
&rgb, TRUE, TRUE);
editor->control_sel_l->right_color,
TRUE, TRUE);
g_signal_connect (editor->color_dialog, "destroy",
G_CALLBACK (gtk_widget_destroyed),
@ -1061,14 +1056,11 @@ gradient_editor_replace_selection (GimpGradientEditor *editor,
static void
gradient_editor_left_color_update (GimpColorDialog *dialog,
const GimpRGB *rgb,
GeglColor *color,
GimpColorDialogState state,
GimpGradientEditor *editor)
{
GimpGradient *gradient = GIMP_GRADIENT (GIMP_DATA_EDITOR (editor)->data);
GeglColor *color = gegl_color_new (NULL);
gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgb);
switch (state)
{
@ -1108,20 +1100,15 @@ gradient_editor_left_color_update (GimpColorDialog *dialog,
gimp_editor_get_popup_data (GIMP_EDITOR (editor)));
break;
}
g_object_unref (color);
}
static void
gradient_editor_right_color_update (GimpColorDialog *dialog,
const GimpRGB *rgb,
GeglColor *color,
GimpColorDialogState state,
GimpGradientEditor *editor)
{
GimpGradient *gradient = GIMP_GRADIENT (GIMP_DATA_EDITOR (editor)->data);
GeglColor *color = gegl_color_new (NULL);
gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgb);
switch (state)
{
@ -1161,8 +1148,6 @@ gradient_editor_right_color_update (GimpColorDialog *dialog,
gimp_editor_get_popup_data (GIMP_EDITOR (editor)));
break;
}
g_object_unref (color);
}

View file

@ -126,7 +126,7 @@ static void palette_editor_resize (GimpPaletteEditor *editor,
gdouble zoom_factor);
static void palette_editor_scroll_top_left (GimpPaletteEditor *editor);
static void palette_editor_edit_color_update (GimpColorDialog *dialog,
const GimpRGB *color,
GeglColor *color,
GimpColorDialogState state,
GimpPaletteEditor *editor);
@ -471,7 +471,6 @@ gimp_palette_editor_edit_color (GimpPaletteEditor *editor)
{
GimpDataEditor *data_editor;
GimpPalette *palette;
GimpRGB rgb;
g_return_if_fail (GIMP_IS_PALETTE_EDITOR (editor));
@ -482,7 +481,6 @@ gimp_palette_editor_edit_color (GimpPaletteEditor *editor)
palette = GIMP_PALETTE (gimp_data_editor_get_data (data_editor));
gegl_color_get_pixel (editor->color->color, babl_format ("R'G'B'A double"), &rgb);
if (! editor->color_dialog)
{
editor->color_dialog =
@ -495,7 +493,7 @@ gimp_palette_editor_edit_color (GimpPaletteEditor *editor)
GTK_WIDGET (editor),
gimp_dialog_factory_get_singleton (),
"gimp-palette-editor-color-dialog",
&rgb,
editor->color->color,
FALSE, FALSE);
g_signal_connect (editor->color_dialog, "destroy",
@ -511,7 +509,8 @@ gimp_palette_editor_edit_color (GimpPaletteEditor *editor)
gimp_viewable_dialog_set_viewables (GIMP_VIEWABLE_DIALOG (editor->color_dialog),
g_list_prepend (NULL, palette),
data_editor->context);
gimp_color_dialog_set_color (GIMP_COLOR_DIALOG (editor->color_dialog), &rgb);
gimp_color_dialog_set_color (GIMP_COLOR_DIALOG (editor->color_dialog),
editor->color->color);
if (! gtk_widget_get_visible (editor->color_dialog))
gimp_dialog_factory_position_dialog (gimp_dialog_factory_get_singleton (),
@ -1005,7 +1004,7 @@ palette_editor_scroll_top_left (GimpPaletteEditor *palette_editor)
static void
palette_editor_edit_color_update (GimpColorDialog *dialog,
const GimpRGB *color,
GeglColor *color,
GimpColorDialogState state,
GimpPaletteEditor *editor)
{
@ -1019,7 +1018,8 @@ palette_editor_edit_color_update (GimpColorDialog *dialog,
case GIMP_COLOR_DIALOG_OK:
if (editor->color)
{
gegl_color_set_pixel (editor->color->color, babl_format ("R'G'B'A double"), color);
g_clear_object (&editor->color->color);
editor->color->color = gegl_color_duplicate (color);
gimp_data_dirty (GIMP_DATA (palette));
}
/* Fallthrough */

View file

@ -53,7 +53,7 @@ static void color_area_background_changed (GimpContext *context,
GimpColorDialog *dialog);
static void color_area_dialog_update (GimpColorDialog *dialog,
const GimpRGB *color,
GeglColor *color,
GimpColorDialogState state,
GimpContext *context);
@ -131,8 +131,7 @@ color_area_foreground_changed (GimpContext *context,
color_area_dialog_update,
context);
/* FIXME this should use GimpColorDialog API */
gimp_color_selection_set_color (GIMP_COLOR_SELECTION (dialog->selection), color);
gimp_color_dialog_set_color (dialog, color);
g_signal_handlers_unblock_by_func (dialog,
color_area_dialog_update,
@ -151,8 +150,7 @@ color_area_background_changed (GimpContext *context,
color_area_dialog_update,
context);
/* FIXME this should use GimpColorDialog API */
gimp_color_selection_set_color (GIMP_COLOR_SELECTION (dialog->selection), color);
gimp_color_dialog_set_color (dialog, color);
g_signal_handlers_unblock_by_func (dialog,
color_area_dialog_update,
@ -162,14 +160,10 @@ color_area_background_changed (GimpContext *context,
static void
color_area_dialog_update (GimpColorDialog *dialog,
const GimpRGB *rgb,
GeglColor *color,
GimpColorDialogState state,
GimpContext *context)
{
GeglColor *color = gegl_color_new ("black");
gegl_color_set_rgba_with_space (color, rgb->r, rgb->g, rgb->b, rgb->a, NULL);
switch (state)
{
case GIMP_COLOR_DIALOG_OK:
@ -216,8 +210,6 @@ color_area_dialog_update (GimpColorDialog *dialog,
if (gimp_context_get_display (context))
gimp_display_grab_focus (gimp_context_get_display (context));
g_object_unref (color);
}
static void
@ -226,7 +218,6 @@ color_area_color_clicked (GimpFgBgEditor *editor,
GimpContext *context)
{
GeglColor *color;
GimpRGB rgb;
const gchar *title;
if (! color_dialog_active)
@ -240,13 +231,11 @@ color_area_color_clicked (GimpFgBgEditor *editor,
if (active_color == GIMP_ACTIVE_COLOR_FOREGROUND)
{
color = gimp_context_get_foreground (context);
gegl_color_get_rgba_with_space (color, &rgb.r, &rgb.g, &rgb.b, &rgb.a, NULL);
title = _("Change Foreground Color");
}
else
{
color = gimp_context_get_background (context);
gegl_color_get_rgba_with_space (color, &rgb.r, &rgb.g, &rgb.b, &rgb.a, NULL);
title = _("Change Background Color");
}
@ -259,8 +248,7 @@ color_area_color_clicked (GimpFgBgEditor *editor,
GTK_WIDGET (editor),
gimp_dialog_factory_get_singleton (),
"gimp-toolbox-color-dialog",
&rgb,
TRUE, FALSE);
color, TRUE, FALSE);
g_signal_connect_object (color_dialog, "update",
G_CALLBACK (color_area_dialog_update),
@ -282,7 +270,7 @@ color_area_color_clicked (GimpFgBgEditor *editor,
}
gtk_window_set_title (GTK_WINDOW (color_dialog), title);
gimp_color_dialog_set_color (GIMP_COLOR_DIALOG (color_dialog), &rgb);
gimp_color_dialog_set_color (GIMP_COLOR_DIALOG (color_dialog), color);
gtk_window_present (GTK_WINDOW (color_dialog));
color_dialog_active = TRUE;