void gimp_tool_push_status_coords (GimpTool *tool, GimpDisplay *display, GimpCursorPrecision precision, const gchar *title, gdouble x, const gchar *separator, gdouble y, const gchar *help) { GimpDisplayShell *shell; const gchar *stock_id; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); shell = GIMP_DISPLAY_SHELL (display->shell); stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); gimp_statusbar_push_coords (GIMP_STATUSBAR (shell->statusbar), G_OBJECT_TYPE_NAME (tool), stock_id, precision, title, x, separator, y, help); tool->status_displays = g_list_remove (tool->status_displays, display); tool->status_displays = g_list_prepend (tool->status_displays, display); }
void gimp_tool_push_status_length (GimpTool *tool, GimpDisplay *display, const gchar *title, GimpOrientationType axis, gdouble value, const gchar *help) { GimpDisplayShell *shell; const gchar *stock_id; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); shell = GIMP_DISPLAY_SHELL (display->shell); stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); gimp_statusbar_push_length (GIMP_STATUSBAR (shell->statusbar), G_OBJECT_TYPE_NAME (tool), stock_id, title, axis, value, help); tool->status_displays = g_list_remove (tool->status_displays, display); tool->status_displays = g_list_prepend (tool->status_displays, display); }
GimpDisplay * gimp_tool_has_image (GimpTool *tool, GimpImage *image) { GimpDisplay *display; g_return_val_if_fail (GIMP_IS_TOOL (tool), NULL); g_return_val_if_fail (image == NULL || GIMP_IS_IMAGE (image), NULL); display = GIMP_TOOL_GET_CLASS (tool)->has_image (tool, image); /* check status displays last because they don't affect the tool * itself (unlike tool->display or draw_tool->display) */ if (! display && tool->status_displays) { GList *list; for (list = tool->status_displays; list; list = g_list_next (list)) { GimpDisplay *status_display = list->data; if (status_display->image == image) return status_display; } /* NULL image means any display */ if (! image) return tool->status_displays->data; } return display; }
void gimp_tool_push_status (GimpTool *tool, GimpDisplay *display, const gchar *format, ...) { GimpDisplayShell *shell; const gchar *stock_id; va_list args; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (format != NULL); shell = GIMP_DISPLAY_SHELL (display->shell); stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool->tool_info)); va_start (args, format); gimp_statusbar_push_valist (GIMP_STATUSBAR (shell->statusbar), G_OBJECT_TYPE_NAME (tool), stock_id, format, args); va_end (args); tool->status_displays = g_list_remove (tool->status_displays, display); tool->status_displays = g_list_prepend (tool->status_displays, display); }
void gimp_tool_set_focus_display (GimpTool *tool, GimpDisplay *display) { g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (display == NULL || GIMP_IS_DISPLAY (display)); g_return_if_fail (gimp_tool_control_is_active (tool->control) == FALSE); GIMP_LOG (TOOL_FOCUS, "tool: %p focus_display: %p tool->focus_display: %p", tool, display, tool->focus_display); if (display != tool->focus_display) { if (tool->focus_display) { if (tool->active_modifier_state != 0) { gimp_tool_control_activate (tool->control); gimp_tool_set_active_modifier_state (tool, 0, tool->focus_display); gimp_tool_control_halt (tool->control); } if (tool->modifier_state != 0) gimp_tool_set_modifier_state (tool, 0, tool->focus_display); } tool->focus_display = display; } }
void gimp_tool_button_press (GimpTool *tool, GimpCoords *coords, guint32 time, GdkModifierType state, GimpDisplay *display) { g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (coords != NULL); g_return_if_fail (GIMP_IS_DISPLAY (display)); GIMP_TOOL_GET_CLASS (tool)->button_press (tool, coords, time, state, display); if (gimp_tool_control_is_active (tool->control)) { tool->button_press_state = state; tool->active_modifier_state = state; if (gimp_tool_control_get_wants_click (tool->control)) { tool->in_click_distance = TRUE; tool->got_motion_event = FALSE; tool->button_press_coords = *coords; tool->button_press_time = time; } else { tool->in_click_distance = FALSE; } } }
void gimp_tool_set_focus_display (GimpTool *tool, GimpDisplay *display) { g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (display == NULL || GIMP_IS_DISPLAY (display)); #ifdef DEBUG_FOCUS g_printerr ("%s: tool: %p display: %p focus_display: %p\n", G_STRFUNC, tool, display, tool->focus_display); #endif if (display != tool->focus_display) { if (tool->focus_display) { if (tool->active_modifier_state != 0) gimp_tool_set_active_modifier_state (tool, 0, tool->focus_display); if (tool->modifier_state != 0) gimp_tool_set_modifier_state (tool, 0, tool->focus_display); } tool->focus_display = display; } }
void gimp_tool_replace_status (GimpTool *tool, GimpDisplay *display, const gchar *format, ...) { GimpDisplayShell *shell; va_list args; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (format != NULL); shell = GIMP_DISPLAY_SHELL (display->shell); va_start (args, format); gimp_statusbar_replace_valist (GIMP_STATUSBAR (shell->statusbar), G_OBJECT_TYPE_NAME (tool), format, args); va_end (args); tool->status_displays = g_list_remove (tool->status_displays, display); tool->status_displays = g_list_prepend (tool->status_displays, display); }
void tool_manager_select_tool (Gimp *gimp, GimpTool *tool) { GimpToolManager *tool_manager; g_return_if_fail (GIMP_IS_GIMP (gimp)); g_return_if_fail (GIMP_IS_TOOL (tool)); tool_manager = tool_manager_get (gimp); if (tool_manager->active_tool) { GimpTool *active_tool = tool_manager->active_tool; GimpDisplay *display; /* NULL image returns any display (if there is any) */ display = gimp_tool_has_image (active_tool, NULL); tool_manager_control_active (gimp, GIMP_TOOL_ACTION_HALT, display); tool_manager_focus_display_active (gimp, NULL); g_object_unref (tool_manager->active_tool); } tool_manager->active_tool = g_object_ref (tool); }
static void tool_manager_select_tool (Gimp *gimp, GimpTool *tool) { GimpToolManager *tool_manager; g_return_if_fail (GIMP_IS_GIMP (gimp)); g_return_if_fail (GIMP_IS_TOOL (tool)); tool_manager = tool_manager_get (gimp); /* reset the previously selected tool, but only if it is not only * temporarily pushed to the tool stack */ if (tool_manager->active_tool && ! (tool_manager->tool_stack && tool_manager->active_tool == tool_manager->tool_stack->data)) { GimpTool *active_tool = tool_manager->active_tool; GimpDisplay *display; /* NULL image returns any display (if there is any) */ display = gimp_tool_has_image (active_tool, NULL); tool_manager_control_active (gimp, GIMP_TOOL_ACTION_HALT, display); tool_manager_focus_display_active (gimp, NULL); g_object_unref (tool_manager->active_tool); } tool_manager->active_tool = g_object_ref (tool); }
void tool_manager_push_tool (Gimp *gimp, GimpTool *tool) { GimpToolManager *tool_manager; GimpDisplay *focus_display = NULL; g_return_if_fail (GIMP_IS_GIMP (gimp)); g_return_if_fail (GIMP_IS_TOOL (tool)); tool_manager = tool_manager_get (gimp); if (tool_manager->active_tool) { focus_display = tool_manager->active_tool->focus_display; tool_manager->tool_stack = g_slist_prepend (tool_manager->tool_stack, tool_manager->active_tool); g_object_ref (tool_manager->tool_stack->data); } tool_manager_select_tool (gimp, tool); if (focus_display) tool_manager_focus_display_active (gimp, focus_display); }
GimpToolOptions * gimp_tool_get_options (GimpTool *tool) { g_return_val_if_fail (GIMP_IS_TOOL (tool), NULL); g_return_val_if_fail (GIMP_IS_TOOL_INFO (tool->tool_info), NULL); return tool->tool_info->tool_options; }
static void gimp_tool_clear_status (GimpTool *tool) { g_return_if_fail (GIMP_IS_TOOL (tool)); while (tool->status_displays) gimp_tool_pop_status (tool, tool->status_displays->data); }
void gimp_sample_point_tool_start_new (GimpTool *parent_tool, GimpDisplay *display) { g_return_if_fail (GIMP_IS_TOOL (parent_tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); gimp_sample_point_tool_start (parent_tool, display, NULL); }
gboolean gimp_tool_has_display (GimpTool *tool, GimpDisplay *display) { g_return_val_if_fail (GIMP_IS_TOOL (tool), FALSE); g_return_val_if_fail (GIMP_IS_DISPLAY (display), FALSE); return GIMP_TOOL_GET_CLASS (tool)->has_display (tool, display); }
gboolean gimp_tool_key_press (GimpTool *tool, GdkEventKey *kevent, GimpDisplay *display) { g_return_val_if_fail (GIMP_IS_TOOL (tool), FALSE); g_return_val_if_fail (GIMP_IS_DISPLAY (display), FALSE); g_return_val_if_fail (display == tool->focus_display, FALSE); return GIMP_TOOL_GET_CLASS (tool)->key_press (tool, kevent, display); }
void gimp_sample_point_tool_start_edit (GimpTool *parent_tool, GimpDisplay *display, GimpSamplePoint *sample_point) { g_return_if_fail (GIMP_IS_TOOL (parent_tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (GIMP_IS_SAMPLE_POINT (sample_point)); gimp_sample_point_tool_start (parent_tool, display, sample_point); }
void gimp_guide_tool_start_edit (GimpTool *parent_tool, GimpDisplay *display, GimpGuide *guide) { g_return_if_fail (GIMP_IS_TOOL (parent_tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (GIMP_IS_GUIDE (guide)); gimp_guide_tool_start (parent_tool, display, guide, GIMP_ORIENTATION_UNKNOWN); }
const gchar * gimp_tool_get_redo_desc (GimpTool *tool, GimpDisplay *display) { g_return_val_if_fail (GIMP_IS_TOOL (tool), NULL); g_return_val_if_fail (GIMP_IS_DISPLAY (display), NULL); if (display == tool->display) return GIMP_TOOL_GET_CLASS (tool)->get_redo_desc (tool, display); return NULL; }
gboolean gimp_tool_redo (GimpTool *tool, GimpDisplay *display) { g_return_val_if_fail (GIMP_IS_TOOL (tool), FALSE); g_return_val_if_fail (GIMP_IS_DISPLAY (display), FALSE); if (display == tool->display) return GIMP_TOOL_GET_CLASS (tool)->redo (tool, display); return FALSE; }
void gimp_tool_cursor_update (GimpTool *tool, GimpCoords *coords, GdkModifierType state, GimpDisplay *display) { g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (coords != NULL); g_return_if_fail (GIMP_IS_DISPLAY (display)); GIMP_TOOL_GET_CLASS (tool)->cursor_update (tool, coords, state, display); }
void gimp_tool_message_literal (GimpTool *tool, GimpDisplay *display, const gchar *message) { g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (message != NULL); gimp_message_literal (display->gimp, G_OBJECT (display), GIMP_MESSAGE_WARNING, message); }
void gimp_guide_tool_start_new (GimpTool *parent_tool, GimpDisplay *display, GimpOrientationType orientation) { g_return_if_fail (GIMP_IS_TOOL (parent_tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (orientation != GIMP_ORIENTATION_UNKNOWN); gimp_guide_tool_start (parent_tool, display, NULL, orientation); }
void gimp_tool_button_release (GimpTool *tool, GimpCoords *coords, guint32 time, GdkModifierType state, GimpDisplay *display) { GimpButtonReleaseType release_type = GIMP_BUTTON_RELEASE_NORMAL; GimpCoords my_coords; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (coords != NULL); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_object_ref (tool); my_coords = *coords; if (state & GDK_BUTTON3_MASK) { release_type = GIMP_BUTTON_RELEASE_CANCEL; } else if (gimp_tool_control_get_wants_click (tool->control)) { if (gimp_tool_check_click_distance (tool, coords, time, display)) { release_type = GIMP_BUTTON_RELEASE_CLICK; my_coords = tool->button_press_coords; /* synthesize a motion event back to the recorded press * coordinates */ GIMP_TOOL_GET_CLASS (tool)->motion (tool, &my_coords, time, state & GDK_BUTTON1_MASK, display); } else if (! tool->got_motion_event) { release_type = GIMP_BUTTON_RELEASE_NO_MOTION; } } GIMP_TOOL_GET_CLASS (tool)->button_release (tool, &my_coords, time, state, release_type, display); if (tool->active_modifier_state != 0) gimp_tool_set_active_modifier_state (tool, 0, display); tool->button_press_state = 0; g_object_unref (tool); }
void gimp_tool_set_cursor (GimpTool *tool, GimpDisplay *display, GimpCursorType cursor, GimpToolCursorType tool_cursor, GimpCursorModifier modifier) { g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); gimp_display_shell_set_cursor (GIMP_DISPLAY_SHELL (display->shell), cursor, tool_cursor, modifier); }
static void gimp_tool_modifier_key (GimpTool *tool, GdkModifierType key, gboolean press, GdkModifierType state, GimpDisplay *display) { g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (display == tool->focus_display); GIMP_TOOL_GET_CLASS (tool)->modifier_key (tool, key, press, state, display); }
gboolean gimp_tool_key_release (GimpTool *tool, GdkEventKey *kevent, GimpDisplay *display) { g_return_val_if_fail (GIMP_IS_TOOL (tool), FALSE); g_return_val_if_fail (GIMP_IS_DISPLAY (display), FALSE); g_return_val_if_fail (display == tool->focus_display, FALSE); g_return_val_if_fail (gimp_tool_control_is_active (tool->control) == FALSE, FALSE); return GIMP_TOOL_GET_CLASS (tool)->key_release (tool, kevent, display); }
GimpUIManager * gimp_tool_get_popup (GimpTool *tool, const GimpCoords *coords, GdkModifierType state, GimpDisplay *display, const gchar **ui_path) { g_return_val_if_fail (GIMP_IS_TOOL (tool), NULL); g_return_val_if_fail (coords != NULL, NULL); g_return_val_if_fail (GIMP_IS_DISPLAY (display), NULL); g_return_val_if_fail (ui_path != NULL, NULL); return GIMP_TOOL_GET_CLASS (tool)->get_popup (tool, coords, state, display, ui_path); }
void gimp_tool_pop_status (GimpTool *tool, GimpDisplay *display) { GimpDisplayShell *shell; g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (display)); shell = GIMP_DISPLAY_SHELL (display->shell); gimp_statusbar_pop (GIMP_STATUSBAR (shell->statusbar), G_OBJECT_TYPE_NAME (tool)); tool->status_displays = g_list_remove (tool->status_displays, display); }
void gimp_tool_motion (GimpTool *tool, const GimpCoords *coords, guint32 time, GdkModifierType state, GimpDisplay *display) { g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (coords != NULL); g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (gimp_tool_control_is_active (tool->control) == TRUE); tool->got_motion_event = TRUE; GIMP_TOOL_GET_CLASS (tool)->motion (tool, coords, time, state, display); }