void drawable_lock_position_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GimpDrawable *drawable; gboolean locked; return_if_no_drawable (image, drawable, data); locked = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); if (GIMP_IS_LAYER_MASK (drawable)) drawable = GIMP_DRAWABLE (gimp_layer_mask_get_layer (GIMP_LAYER_MASK (drawable))); if (locked != gimp_item_get_lock_position (GIMP_ITEM (drawable))) { GimpUndo *undo; gboolean push_undo = TRUE; undo = gimp_image_undo_can_compress (image, GIMP_TYPE_ITEM_UNDO, GIMP_UNDO_ITEM_LOCK_POSITION); if (undo && GIMP_ITEM_UNDO (undo)->item == GIMP_ITEM (drawable)) push_undo = FALSE; gimp_item_set_lock_position (GIMP_ITEM (drawable), locked, push_undo); gimp_image_flush (image); } }
void drawable_erode_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GimpDrawable *drawable; GimpDisplay *display; GeglNode *node; return_if_no_drawable (image, drawable, data); return_if_no_display (display, data); node = gegl_node_new_child (NULL, "operation", "gegl:value-propagate", "mode", 1, /* GEGL_VALUE_PROPAGATE_MODE_BLACK */ "lower-threshold", 0.0, "upper-threshold", 1.0, "rate", 1.0, "top", TRUE, "left", TRUE, "right", TRUE, "bottom", TRUE, "value", TRUE, "alpha", FALSE, NULL); gimp_drawable_apply_operation (drawable, GIMP_PROGRESS (display), _("Erode"), node); g_object_unref (node); gimp_image_flush (image); }
void edit_copy_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GimpDrawable *drawable; GError *error = NULL; return_if_no_drawable (image, drawable, data); if (gimp_edit_copy (image, drawable, action_data_get_context (data), &error)) { GimpDisplay *display = action_data_get_display (data); if (display) gimp_message_literal (image->gimp, G_OBJECT (display), GIMP_MESSAGE_INFO, _("Copied pixels to the clipboard")); gimp_image_flush (image); } else { gimp_message_literal (image->gimp, G_OBJECT (action_data_get_display (data)), GIMP_MESSAGE_WARNING, error->message); g_clear_error (&error); } }
void edit_fill_cmd_callback (GtkAction *action, gint value, gpointer data) { GimpImage *image; GimpDrawable *drawable; GimpFillType fill_type; GimpFillOptions *options; GError *error = NULL; return_if_no_drawable (image, drawable, data); fill_type = (GimpFillType) value; options = gimp_fill_options_new (action_data_get_gimp (data), NULL, FALSE); if (gimp_fill_options_set_by_fill_type (options, action_data_get_context (data), fill_type, &error)) { gimp_edit_fill (image, drawable, options, NULL); gimp_image_flush (image); } else { gimp_message_literal (image->gimp, NULL, GIMP_MESSAGE_WARNING, error->message); g_clear_error (&error); } g_object_unref (options); }
void edit_fill_cmd_callback (GtkAction *action, gint value, gpointer data) { GimpImage *image; GimpDrawable *drawable; GimpFillType fill_type; GError *error = NULL; return_if_no_drawable (image, drawable, data); fill_type = (GimpFillType) value; if (gimp_edit_fill (image, drawable, action_data_get_context (data), fill_type, GIMP_OPACITY_OPAQUE, GIMP_NORMAL_MODE, &error)) { gimp_image_flush (image); } else { gimp_message_literal (image->gimp, NULL, GIMP_MESSAGE_WARNING, error->message); g_clear_error (&error); } }
void drawable_equalize_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GimpDrawable *drawable; return_if_no_drawable (image, drawable, data); gimp_drawable_equalize (drawable, TRUE); gimp_image_flush (image); }
void edit_clear_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GimpDrawable *drawable; return_if_no_drawable (image, drawable, data); gimp_edit_clear (image, drawable, action_data_get_context (data)); gimp_image_flush (image); }
void drawable_value_invert_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GimpDrawable *drawable; GimpDisplay *display; return_if_no_drawable (image, drawable, data); return_if_no_display (display, data); gimp_drawable_apply_operation_by_name (drawable, GIMP_PROGRESS (display), _("Invert"), "gegl:value-invert", NULL); gimp_image_flush (image); }
void drawable_offset_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GimpDrawable *drawable; GtkWidget *widget; GtkWidget *dialog; return_if_no_drawable (image, drawable, data); return_if_no_widget (widget, data); dialog = offset_dialog_new (drawable, action_data_get_context (data), widget); gtk_widget_show (dialog); }
void edit_fill_cmd_callback (GtkAction *action, gint value, gpointer data) { GimpImage *image; GimpDrawable *drawable; GimpFillType fill_type; return_if_no_drawable (image, drawable, data); fill_type = (GimpFillType) value; gimp_edit_fill (image, drawable, action_data_get_context (data), fill_type, GIMP_OPACITY_OPAQUE, GIMP_NORMAL_MODE); gimp_image_flush (image); }
void drawable_flip_cmd_callback (GtkAction *action, gint value, gpointer data) { GimpImage *image; GimpDrawable *drawable; GimpItem *item; GimpContext *context; gint off_x, off_y; gdouble axis = 0.0; return_if_no_drawable (image, drawable, data); return_if_no_context (context, data); item = GIMP_ITEM (drawable); gimp_item_get_offset (item, &off_x, &off_y); switch ((GimpOrientationType) value) { case GIMP_ORIENTATION_HORIZONTAL: axis = ((gdouble) off_x + (gdouble) gimp_item_get_width (item) / 2.0); break; case GIMP_ORIENTATION_VERTICAL: axis = ((gdouble) off_y + (gdouble) gimp_item_get_height (item) / 2.0); break; default: break; } if (gimp_item_get_linked (item)) { gimp_item_linked_flip (item, context, (GimpOrientationType) value, axis, FALSE); } else { gimp_item_flip (item, context, (GimpOrientationType) value, axis, FALSE); } gimp_image_flush (image); }
void drawable_rotate_cmd_callback (GtkAction *action, gint value, gpointer data) { GimpImage *image; GimpDrawable *drawable; GimpContext *context; GimpItem *item; gint off_x, off_y; gdouble center_x, center_y; gboolean clip_result = FALSE; return_if_no_drawable (image, drawable, data); return_if_no_context (context, data); item = GIMP_ITEM (drawable); gimp_item_get_offset (item, &off_x, &off_y); center_x = ((gdouble) off_x + (gdouble) gimp_item_get_width (item) / 2.0); center_y = ((gdouble) off_y + (gdouble) gimp_item_get_height (item) / 2.0); if (GIMP_IS_CHANNEL (item)) clip_result = TRUE; if (gimp_item_get_linked (item)) { gimp_item_linked_rotate (item, context, (GimpRotationType) value, center_x, center_y, FALSE); } else { gimp_item_rotate (item, context, (GimpRotationType) value, center_x, center_y, clip_result); } gimp_image_flush (image); }
void drawable_levels_stretch_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GimpDrawable *drawable; GimpDisplay *display; GtkWidget *widget; return_if_no_drawable (image, drawable, data); return_if_no_display (display, data); return_if_no_widget (widget, data); if (! gimp_drawable_is_rgb (drawable)) { gimp_message_literal (image->gimp, G_OBJECT (widget), GIMP_MESSAGE_WARNING, _("White Balance operates only on RGB color layers.")); return; } gimp_drawable_levels_stretch (drawable, GIMP_PROGRESS (display)); gimp_image_flush (image); }