static GimpCanvasItem * gimp_brush_tool_get_outline (GimpPaintTool *paint_tool, GimpDisplay *display, gdouble x, gdouble y) { GimpBrushTool *brush_tool = GIMP_BRUSH_TOOL (paint_tool); GimpCanvasItem *item; item = gimp_brush_tool_create_outline (brush_tool, display, x, y); if (! item) { GimpBrushCore *brush_core = GIMP_BRUSH_CORE (paint_tool->core); if (brush_core->main_brush && brush_core->dynamics) { /* if an outline was expected, but got scaled away by * transform/dynamics, draw a circle in the "normal" size. */ GimpPaintOptions *options; options = GIMP_PAINT_TOOL_GET_OPTIONS (brush_tool); gimp_paint_tool_set_draw_circle (paint_tool, TRUE, options->brush_size); } } return item; }
static void gimp_source_tool_draw (GimpDrawTool *draw_tool) { GimpSourceTool *source_tool = GIMP_SOURCE_TOOL (draw_tool); GimpSourceOptions *options = GIMP_SOURCE_TOOL_GET_OPTIONS (draw_tool); GimpSourceCore *source; source = GIMP_SOURCE_CORE (GIMP_PAINT_TOOL (draw_tool)->core); if (options->use_source && source->src_drawable && source_tool->src_display) { GimpDisplay *tmp_display = draw_tool->display; gint off_x; gint off_y; draw_tool->display = source_tool->src_display; gimp_item_get_offset (GIMP_ITEM (source->src_drawable), &off_x, &off_y); if (source_tool->show_source_outline) gimp_brush_tool_draw_brush (GIMP_BRUSH_TOOL (source_tool), source_tool->src_x + off_x, source_tool->src_y + off_y, FALSE); gimp_draw_tool_add_handle (draw_tool, GIMP_HANDLE_CROSS, source_tool->src_x + off_x, source_tool->src_y + off_y, GIMP_TOOL_HANDLE_SIZE_CROSS, GIMP_TOOL_HANDLE_SIZE_CROSS, GIMP_HANDLE_ANCHOR_CENTER); draw_tool->display = tmp_display; } GIMP_DRAW_TOOL_CLASS (parent_class)->draw (draw_tool); }
static void gimp_brush_tool_cursor_update (GimpTool *tool, const GimpCoords *coords, GdkModifierType state, GimpDisplay *display) { GimpBrushTool *brush_tool = GIMP_BRUSH_TOOL (tool); GimpBrushCore *brush_core = GIMP_BRUSH_CORE (GIMP_PAINT_TOOL (brush_tool)->core); if (! gimp_color_tool_is_enabled (GIMP_COLOR_TOOL (tool))) { if (! brush_core->main_brush || ! brush_core->dynamics) { gimp_tool_set_cursor (tool, display, gimp_tool_control_get_cursor (tool->control), gimp_tool_control_get_tool_cursor (tool->control), GIMP_CURSOR_MODIFIER_BAD); return; } } GIMP_TOOL_CLASS (parent_class)->cursor_update (tool, coords, state, display); }
static void gimp_source_tool_draw (GimpDrawTool *draw_tool) { GimpSourceTool *source_tool = GIMP_SOURCE_TOOL (draw_tool); GimpSourceOptions *options = GIMP_SOURCE_TOOL_GET_OPTIONS (draw_tool); GimpSourceCore *source; source = GIMP_SOURCE_CORE (GIMP_PAINT_TOOL (draw_tool)->core); GIMP_DRAW_TOOL_CLASS (parent_class)->draw (draw_tool); if (gimp_source_core_use_source (source, options) && source->src_drawable && source_tool->src_display) { GimpDisplayShell *src_shell; gint off_x; gint off_y; src_shell = gimp_display_get_shell (source_tool->src_display); gimp_item_get_offset (GIMP_ITEM (source->src_drawable), &off_x, &off_y); if (source_tool->src_outline) { gimp_display_shell_remove_tool_item (src_shell, source_tool->src_outline); source_tool->src_outline = NULL; } if (source_tool->show_source_outline) { source_tool->src_outline = gimp_brush_tool_create_outline (GIMP_BRUSH_TOOL (source_tool), source_tool->src_display, source_tool->src_x + off_x, source_tool->src_y + off_y); if (source_tool->src_outline) { gimp_display_shell_add_tool_item (src_shell, source_tool->src_outline); g_object_unref (source_tool->src_outline); } } if (source_tool->src_outline) { if (source_tool->src_handle) { gimp_display_shell_remove_tool_item (src_shell, source_tool->src_handle); source_tool->src_handle = NULL; } } else { if (! source_tool->src_handle) { source_tool->src_handle = gimp_canvas_handle_new (src_shell, GIMP_HANDLE_CROSS, GIMP_HANDLE_ANCHOR_CENTER, source_tool->src_x + off_x, source_tool->src_y + off_y, GIMP_TOOL_HANDLE_SIZE_CROSS, GIMP_TOOL_HANDLE_SIZE_CROSS); gimp_display_shell_add_tool_item (src_shell, source_tool->src_handle); g_object_unref (source_tool->src_handle); } else { gimp_canvas_handle_set_position (source_tool->src_handle, source_tool->src_x + off_x, source_tool->src_y + off_y); } } } }