void layers_text_tool_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GimpLayer *layer; GtkWidget *widget; GimpTool *active_tool; return_if_no_layer (image, layer, data); return_if_no_widget (widget, data); if (! gimp_item_is_text_layer (GIMP_ITEM (layer))) { layers_edit_attributes_cmd_callback (action, data); return; } active_tool = tool_manager_get_active (image->gimp); if (! GIMP_IS_TEXT_TOOL (active_tool)) { GimpToolInfo *tool_info = gimp_get_tool_info (image->gimp, "gimp-text-tool"); if (GIMP_IS_TOOL_INFO (tool_info)) { gimp_context_set_tool (action_data_get_context (data), tool_info); active_tool = tool_manager_get_active (image->gimp); } } if (GIMP_IS_TEXT_TOOL (active_tool)) gimp_text_tool_set_layer (GIMP_TEXT_TOOL (active_tool), layer); }
void vectors_edit_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; GimpVectors *vectors; GimpTool *active_tool; return_if_no_vectors (image, vectors, data); active_tool = tool_manager_get_active (image->gimp); if (! GIMP_IS_VECTOR_TOOL (active_tool)) { GimpToolInfo *tool_info = gimp_get_tool_info (image->gimp, "gimp-vector-tool"); if (GIMP_IS_TOOL_INFO (tool_info)) { gimp_context_set_tool (action_data_get_context (data), tool_info); active_tool = tool_manager_get_active (image->gimp); } } if (GIMP_IS_VECTOR_TOOL (active_tool)) gimp_vector_tool_set_vectors (GIMP_VECTOR_TOOL (active_tool), vectors); }
static void gimp_paint_tool_modifier_key (GimpTool *tool, GdkModifierType key, gboolean press, GdkModifierType state, GimpDisplay *display) { GimpPaintTool *paint_tool = GIMP_PAINT_TOOL (tool); GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool); if (paint_tool->pick_colors && ! paint_tool->draw_line) { if ((state & gimp_get_all_modifiers_mask ()) == gimp_get_constrain_behavior_mask ()) { if (! gimp_color_tool_is_enabled (GIMP_COLOR_TOOL (tool))) { GimpToolInfo *info = gimp_get_tool_info (display->gimp, "gimp-color-picker-tool"); if (GIMP_IS_TOOL_INFO (info)) { if (gimp_draw_tool_is_active (draw_tool)) gimp_draw_tool_stop (draw_tool); gimp_color_tool_enable (GIMP_COLOR_TOOL (tool), GIMP_COLOR_OPTIONS (info->tool_options)); switch (GIMP_COLOR_TOOL (tool)->pick_mode) { case GIMP_COLOR_PICK_MODE_FOREGROUND: gimp_tool_push_status (tool, display, _("Click in any image to pick the " "foreground color")); break; case GIMP_COLOR_PICK_MODE_BACKGROUND: gimp_tool_push_status (tool, display, _("Click in any image to pick the " "background color")); break; default: break; } } } } else { if (gimp_color_tool_is_enabled (GIMP_COLOR_TOOL (tool))) { gimp_tool_pop_status (tool, display); gimp_color_tool_disable (GIMP_COLOR_TOOL (tool)); } } } }
void tools_select_cmd_callback (GtkAction *action, const gchar *value, gpointer data) { Gimp *gimp; GimpToolInfo *tool_info; GimpContext *context; GimpDisplay *display; gboolean rotate_layer = FALSE; return_if_no_gimp (gimp, data); /* special case gimp-rotate-tool being called from the Layer menu */ if (strcmp (value, "gimp-rotate-layer") == 0) { rotate_layer = TRUE; value = "gimp-rotate-tool"; } tool_info = gimp_get_tool_info (gimp, value); context = gimp_get_user_context (gimp); /* always allocate a new tool when selected from the image menu */ if (gimp_context_get_tool (context) != tool_info) { gimp_context_set_tool (context, tool_info); if (rotate_layer) g_object_set (tool_info->tool_options, "type", GIMP_TRANSFORM_TYPE_LAYER, NULL); } else { gimp_context_tool_changed (context); } display = gimp_context_get_display (context); if (display && gimp_display_get_image (display)) tool_manager_initialize_active (gimp, display); }
static void gimp_selection_editor_drop_color (GtkWidget *widget, gint x, gint y, const GimpRGB *color, gpointer data) { GimpImageEditor *editor = GIMP_IMAGE_EDITOR (data); GimpToolInfo *tool_info; GimpSelectionOptions *sel_options; GimpRegionSelectOptions *options; GimpDrawable *drawable; if (! editor->image) return; tool_info = gimp_get_tool_info (editor->image->gimp, "gimp-by-color-select-tool"); if (! tool_info) return; sel_options = GIMP_SELECTION_OPTIONS (tool_info->tool_options); options = GIMP_REGION_SELECT_OPTIONS (tool_info->tool_options); drawable = gimp_image_get_active_drawable (editor->image); if (! drawable) return; gimp_channel_select_by_color (gimp_image_get_mask (editor->image), drawable, options->sample_merged, color, options->threshold, options->select_transparent, options->select_criterion, sel_options->operation, sel_options->antialias, sel_options->feather, sel_options->feather_radius, sel_options->feather_radius); gimp_image_flush (editor->image); }
static gboolean gimp_selection_view_button_press (GtkWidget *widget, GdkEventButton *bevent, GimpSelectionEditor *editor) { GimpImageEditor *image_editor = GIMP_IMAGE_EDITOR (editor); GimpViewRenderer *renderer; GimpToolInfo *tool_info; GimpSelectionOptions *options; GimpDrawable *drawable; GimpChannelOps operation = GIMP_CHANNEL_OP_REPLACE; gint x, y; GimpRGB color; if (! image_editor->image) return TRUE; renderer = GIMP_VIEW (editor->view)->renderer; tool_info = gimp_get_tool_info (image_editor->image->gimp, "gimp-by-color-select-tool"); if (! tool_info) return TRUE; options = GIMP_SELECTION_OPTIONS (tool_info->tool_options); drawable = gimp_image_get_active_drawable (image_editor->image); if (! drawable) return TRUE; if (bevent->state & GDK_SHIFT_MASK) { if (bevent->state & GDK_CONTROL_MASK) { operation = GIMP_CHANNEL_OP_INTERSECT; } else { operation = GIMP_CHANNEL_OP_ADD; } } else if (bevent->state & GDK_CONTROL_MASK) { operation = GIMP_CHANNEL_OP_SUBTRACT; } x = image_editor->image->width * bevent->x / renderer->width; y = image_editor->image->height * bevent->y / renderer->height; if (gimp_image_pick_color (image_editor->image, drawable, x, y, options->sample_merged, FALSE, 0.0, NULL, &color, NULL)) { gimp_channel_select_by_color (gimp_image_get_mask (image_editor->image), drawable, options->sample_merged, &color, options->threshold, options->select_transparent, options->select_criterion, operation, options->antialias, options->feather, options->feather_radius, options->feather_radius); gimp_image_flush (image_editor->image); } return TRUE; }
static gboolean gimp_selection_view_button_press (GtkWidget *widget, GdkEventButton *bevent, GimpSelectionEditor *editor) { GimpImageEditor *image_editor = GIMP_IMAGE_EDITOR (editor); GimpViewRenderer *renderer; GimpToolInfo *tool_info; GimpSelectionOptions *sel_options; GimpRegionSelectOptions *options; GimpDrawable *drawable; GimpChannelOps operation; gint x, y; GimpRGB color; if (! image_editor->image) return TRUE; renderer = GIMP_VIEW (editor->view)->renderer; tool_info = gimp_get_tool_info (image_editor->image->gimp, "gimp-by-color-select-tool"); if (! tool_info) return TRUE; sel_options = GIMP_SELECTION_OPTIONS (tool_info->tool_options); options = GIMP_REGION_SELECT_OPTIONS (tool_info->tool_options); drawable = gimp_image_get_active_drawable (image_editor->image); if (! drawable) return TRUE; operation = gimp_modifiers_to_channel_op (bevent->state); x = gimp_image_get_width (image_editor->image) * bevent->x / renderer->width; y = gimp_image_get_height (image_editor->image) * bevent->y / renderer->height; if (gimp_image_pick_color (image_editor->image, drawable, x, y, options->sample_merged, FALSE, 0.0, NULL, &color, NULL)) { gimp_channel_select_by_color (gimp_image_get_mask (image_editor->image), drawable, options->sample_merged, &color, options->threshold, options->select_transparent, options->select_criterion, operation, sel_options->antialias, sel_options->feather, sel_options->feather_radius, sel_options->feather_radius); gimp_image_flush (image_editor->image); } return TRUE; }