static void gimp_color_area_drag_data_received (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time) { GimpColorArea *area = GIMP_COLOR_AREA (widget); GimpRGB color; guint16 *vals; if (selection_data->length < 0) return; if ((selection_data->format != 16) || (selection_data->length != 8)) { g_warning ("Received invalid color data"); return; } vals = (guint16 *)selection_data->data; gimp_rgba_set (&color, (gdouble) vals[0] / 0xffff, (gdouble) vals[1] / 0xffff, (gdouble) vals[2] / 0xffff, (gdouble) vals[3] / 0xffff); gimp_color_area_set_color (area, &color); }
static void gimp_color_area_drag_data_received (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time) { GimpColorArea *area = GIMP_COLOR_AREA (widget); const guint16 *vals; GimpRGB color; if (gtk_selection_data_get_length (selection_data) != 8 || gtk_selection_data_get_format (selection_data) != 16) { g_warning ("%s: received invalid color data", G_STRFUNC); return; } vals = (const guint16 *) gtk_selection_data_get_data (selection_data); gimp_rgba_set (&color, (gdouble) vals[0] / 0xffff, (gdouble) vals[1] / 0xffff, (gdouble) vals[2] / 0xffff, (gdouble) vals[3] / 0xffff); gimp_color_area_set_color (area, &color); }
static void hue_saturation_update_color_areas (GimpHueSaturationTool *hs_tool) { static GimpRGB default_colors[6] = { { 1.0, 0, 0, }, { 1.0, 1.0, 0, }, { 0, 1.0, 0, }, { 0, 1.0, 1.0, }, { 0, 0, 1.0, }, { 1.0, 0, 1.0, } }; gint i; for (i = 0; i < 6; i++) { GimpRGB color = default_colors[i]; gimp_operation_hue_saturation_map (hs_tool->config, &color, i + 1, &color); gimp_color_area_set_color (GIMP_COLOR_AREA (hs_tool->hue_range_color_area[i]), &color); } }
static void gimp_color_history_color_changed (GtkWidget *widget, gpointer data) { GimpRGB changed_color; gint color_index; GList *list; gimp_color_area_get_color (GIMP_COLOR_AREA (widget), &changed_color); color_index = GPOINTER_TO_INT (data); color_history_set (color_index, &changed_color); for (list = color_dialogs; list; list = g_list_next (list)) { GimpColorDialog *dialog = list->data; if (dialog->history[color_index] != widget) { g_signal_handlers_block_by_func (dialog->history[color_index], gimp_color_history_color_changed, data); gimp_color_area_set_color (GIMP_COLOR_AREA (dialog->history[color_index]), &changed_color); g_signal_handlers_unblock_by_func (dialog->history[color_index], gimp_color_history_color_changed, data); } } }
/** * gimp_color_selection_set_old_color: * @selection: A #GimpColorSelection widget. * @color: The @color to set as old color. * * Sets the #GimpColorSelection's old color. **/ void gimp_color_selection_set_old_color (GimpColorSelection *selection, const GimpRGB *color) { g_return_if_fail (GIMP_IS_COLOR_SELECTION (selection)); g_return_if_fail (color != NULL); gimp_color_area_set_color (GIMP_COLOR_AREA (selection->old_color), color); }
/** * gimp_color_button_set_color: * @button: Pointer to a #GimpColorButton. * @color: Pointer to the new #GimpRGB color. * * Sets the @button to the given @color. **/ void gimp_color_button_set_color (GimpColorButton *button, const GimpRGB *color) { g_return_if_fail (GIMP_IS_COLOR_BUTTON (button)); g_return_if_fail (color != NULL); gimp_color_area_set_color (GIMP_COLOR_AREA (button->color_area), color); g_object_notify (G_OBJECT (button), "color"); }
static void gimp_color_picker_tool_info_update (GimpColorPickerTool *picker_tool, GimpImageType sample_type, const GimpRGB *color, gint color_index) { gimp_color_area_set_color (GIMP_COLOR_AREA (picker_tool->color_area), color); gimp_color_frame_set_color (GIMP_COLOR_FRAME (picker_tool->color_frame1), sample_type, color, color_index); gimp_color_frame_set_color (GIMP_COLOR_FRAME (picker_tool->color_frame2), sample_type, color, color_index); /* don't use gtk_window_present() because it would focus the dialog */ if (gtk_widget_get_visible (picker_tool->dialog)) gdk_window_show (gtk_widget_get_window (picker_tool->dialog)); else gtk_widget_show (picker_tool->dialog); }
static void gimp_color_history_add_clicked (GtkWidget *widget, GimpColorDialog *dialog) { GimpRGB color; gint shift_begin; gint i; gimp_color_selection_get_color (GIMP_COLOR_SELECTION (dialog->selection), &color); shift_begin = color_history_add (&color); for (i = shift_begin; i >= 0; i--) { color_history_get (i, &color); gimp_color_area_set_color (GIMP_COLOR_AREA (dialog->history[i]), &color); } }
static void gimp_color_area_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { GimpColorArea *area = GIMP_COLOR_AREA (object); GdkModifierType drag_mask; switch (property_id) { case PROP_COLOR: gimp_color_area_set_color (area, g_value_get_boxed (value)); break; case PROP_TYPE: gimp_color_area_set_type (area, g_value_get_enum (value)); break; case PROP_DRAG_MASK: drag_mask = g_value_get_flags (value) & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK); if (drag_mask) gtk_drag_source_set (GTK_WIDGET (area), drag_mask, &target, 1, GDK_ACTION_COPY | GDK_ACTION_MOVE); break; case PROP_DRAW_BORDER: gimp_color_area_set_draw_border (area, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void gimp_color_button_selection_changed (GtkWidget *selection, GimpColorButton *button) { if (button->continuous_update) { GimpRGB color; gimp_color_selection_get_color (GIMP_COLOR_SELECTION (selection), &color); g_signal_handlers_block_by_func (button->color_area, gimp_color_button_area_changed, button); gimp_color_area_set_color (GIMP_COLOR_AREA (button->color_area), &color); g_signal_handlers_unblock_by_func (button->color_area, gimp_color_button_area_changed, button); g_signal_emit (button, gimp_color_button_signals[COLOR_CHANGED], 0); } }
static void gimp_color_history_palette_dirty (GimpPalette *palette, GimpColorHistory *history) { gint i; for (i = 0; i < history->history_size; i++) { GimpPaletteEntry *entry = gimp_palette_get_entry (palette, i); GimpRGB black = { 0.0, 0.0, 0.0, 1.0 }; g_signal_handlers_block_by_func (history->color_areas[i], gimp_color_history_color_changed, GINT_TO_POINTER (i)); gimp_color_area_set_color (GIMP_COLOR_AREA (history->color_areas[i]), entry ? &entry->color : &black); g_signal_handlers_unblock_by_func (history->color_areas[i], gimp_color_history_color_changed, GINT_TO_POINTER (i)); } }
static void gimp_color_picker_tool_info_update (GimpColorPickerTool *picker_tool, const Babl *sample_format, const GimpRGB *color, gint color_index) { GimpTool *tool = GIMP_TOOL (picker_tool); gimp_tool_gui_set_shell (picker_tool->gui, gimp_display_get_shell (tool->display)); gimp_tool_gui_set_viewable (picker_tool->gui, GIMP_VIEWABLE (tool->drawable)); gimp_color_area_set_color (GIMP_COLOR_AREA (picker_tool->color_area), color); gimp_color_frame_set_color (GIMP_COLOR_FRAME (picker_tool->color_frame1), sample_format, color, color_index); gimp_color_frame_set_color (GIMP_COLOR_FRAME (picker_tool->color_frame2), sample_format, color, color_index); gimp_tool_gui_show (picker_tool->gui); }
static void gimp_color_frame_update (GimpColorFrame *frame) { const gchar *names[GIMP_COLOR_FRAME_ROWS] = { NULL, }; gchar **values = NULL; gboolean has_alpha; gint i; has_alpha = babl_format_has_alpha (frame->sample_format); if (frame->sample_valid) { gimp_color_area_set_color (GIMP_COLOR_AREA (frame->color_area), &frame->color); } switch (frame->frame_mode) { case GIMP_COLOR_FRAME_MODE_PIXEL: { GimpImageBaseType base_type; base_type = gimp_babl_format_get_base_type (frame->sample_format); if (frame->sample_valid) { const Babl *print_format = NULL; guchar print_pixel[32]; switch (gimp_babl_format_get_precision (frame->sample_format)) { case GIMP_PRECISION_U8_GAMMA: if (babl_format_is_palette (frame->sample_format)) { print_format = gimp_babl_format (GIMP_RGB, GIMP_PRECISION_U8_GAMMA, has_alpha); break; } /* else fall thru */ case GIMP_PRECISION_U8_LINEAR: case GIMP_PRECISION_U16_LINEAR: case GIMP_PRECISION_U16_GAMMA: case GIMP_PRECISION_U32_LINEAR: case GIMP_PRECISION_U32_GAMMA: case GIMP_PRECISION_FLOAT_LINEAR: case GIMP_PRECISION_FLOAT_GAMMA: case GIMP_PRECISION_DOUBLE_LINEAR: case GIMP_PRECISION_DOUBLE_GAMMA: print_format = frame->sample_format; break; case GIMP_PRECISION_HALF_GAMMA: print_format = gimp_babl_format (base_type, GIMP_PRECISION_FLOAT_GAMMA, has_alpha); break; case GIMP_PRECISION_HALF_LINEAR: print_format = gimp_babl_format (base_type, GIMP_PRECISION_FLOAT_LINEAR, has_alpha); break; } if (frame->sample_average) { /* FIXME: this is broken: can't use the averaged sRGB GimpRGB * value for displaying pixel values when color management * is enabled */ gimp_rgba_get_pixel (&frame->color, print_format, print_pixel); } else { babl_process (babl_fish (frame->sample_format, print_format), frame->pixel, print_pixel, 1); } values = gimp_babl_print_pixel (print_format, print_pixel); } if (base_type == GIMP_GRAY) { names[0] = _("Value:"); if (has_alpha) names[1] = _("Alpha:"); } else { names[0] = _("Red:"); names[1] = _("Green:"); names[2] = _("Blue:"); if (has_alpha) names[3] = _("Alpha:"); if (babl_format_is_palette (frame->sample_format)) { names[4] = _("Index:"); if (frame->sample_valid) { gchar **v = g_new0 (gchar *, 6); gchar **tmp = values; memcpy (v, values, 4 * sizeof (gchar *)); values = v; g_free (tmp); if (! frame->sample_average) values[4] = g_strdup_printf ("%d", frame->pixel[0]); } } } }
static void gimp_color_selection_update (GimpColorSelection *selection, UpdateType update) { if (update & UPDATE_NOTEBOOK) { g_signal_handlers_block_by_func (selection->notebook, gimp_color_selection_notebook_changed, selection); gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (selection->notebook), &selection->rgb, &selection->hsv); g_signal_handlers_unblock_by_func (selection->notebook, gimp_color_selection_notebook_changed, selection); } if (update & UPDATE_SCALES) { g_signal_handlers_block_by_func (selection->scales, gimp_color_selection_scales_changed, selection); gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (selection->scales), &selection->rgb, &selection->hsv); g_signal_handlers_unblock_by_func (selection->scales, gimp_color_selection_scales_changed, selection); } if (update & UPDATE_ENTRY) { GimpColorHexEntry *entry; entry = g_object_get_data (G_OBJECT (selection), "color-hex-entry"); g_signal_handlers_block_by_func (entry, gimp_color_selection_entry_changed, selection); gimp_color_hex_entry_set_color (entry, &selection->rgb); g_signal_handlers_unblock_by_func (entry, gimp_color_selection_entry_changed, selection); } if (update & UPDATE_COLOR) { g_signal_handlers_block_by_func (selection->new_color, gimp_color_selection_new_color_changed, selection); gimp_color_area_set_color (GIMP_COLOR_AREA (selection->new_color), &selection->rgb); g_signal_handlers_unblock_by_func (selection->new_color, gimp_color_selection_new_color_changed, selection); } }
static void gimp_action_set_proxy (GimpAction *action, GtkWidget *proxy) { if (! GTK_IS_IMAGE_MENU_ITEM (proxy)) return; if (action->color) { GtkWidget *area; area = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (proxy)); if (GIMP_IS_COLOR_AREA (area)) { gimp_color_area_set_color (GIMP_COLOR_AREA (area), action->color); } else { gint width, height; area = gimp_color_area_new (action->color, GIMP_COLOR_AREA_SMALL_CHECKS, 0); gimp_color_area_set_draw_border (GIMP_COLOR_AREA (area), TRUE); gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (proxy), GTK_ICON_SIZE_MENU, &width, &height); gtk_widget_set_size_request (area, width, height); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (proxy), area); gtk_widget_show (area); } } else if (action->viewable) { GtkWidget *view; view = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (proxy)); if (GIMP_IS_VIEW (view) && g_type_is_a (G_TYPE_FROM_INSTANCE (action->viewable), GIMP_VIEW (view)->renderer->viewable_type)) { gimp_view_set_viewable (GIMP_VIEW (view), action->viewable); } else { GtkIconSize size; gint width, height; gint border_width; if (GIMP_IS_IMAGEFILE (action->viewable)) { size = GTK_ICON_SIZE_LARGE_TOOLBAR; border_width = 0; } else { size = GTK_ICON_SIZE_MENU; border_width = 1; } gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (proxy), size, &width, &height); view = gimp_view_new_full (action->context, action->viewable, width, height, border_width, FALSE, FALSE, FALSE); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (proxy), view); gtk_widget_show (view); } } else { GtkWidget *image; image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (proxy)); if (GIMP_IS_VIEW (image) || GIMP_IS_COLOR_AREA (image)) { gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (proxy), NULL); g_object_notify (G_OBJECT (action), "stock-id"); } } { GtkWidget *child = gtk_bin_get_child (GTK_BIN (proxy)); if (GTK_IS_LABEL (child)) { GtkLabel *label = GTK_LABEL (child); gtk_label_set_ellipsize (label, action->ellipsize); gtk_label_set_max_width_chars (label, action->max_width_chars); } } }